Ir para conteúdo
  • Cadastre-se

dev botao

Erro "Segmentation fault" ao executar método NFE_DistribuicaoDFePorUltNSU


Ver Solução Respondido por leoprates,
  • Este tópico foi criado há 401 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Boa tarde! Conforme solicitado pelo Daniel Infocotidiano, criei esse tópico para que possa ser depurado o erro Segmentation fault apresentado no ubuntu ao executar o método NFE_DistribuicaoDFePorUltNSU.

  • Quando ocorre o erro "segmentation fault (core dumped)" o log só chega até o método anterior ao NFE_DistribuicaoDFePorUltNSU.
  • O método de inicialização está ok. A configuração do OpenSSL está assim: [DFe] SSLCryptLib=1 -> cryOpenSSL | SSLHttpLib=3 -> httpOpenSSL | SSLXmlSignLib=4 -> xsLibXml2
  • A versão do OpenSSL é 1.1.1
  • Foram testados diversos valores para o buffer (até 4096)

Método em que o erro ocorre:

const BUFF_LENGTH = 1024;
  
  getDFesPorUltNSU = async (num_ult_nsu_recebido: string) => {
    const aloc_sResposta = Buffer.alloc(BUFF_LENGTH);
    const aloc_esTamanho = ref.alloc(ref.types.int, BUFF_LENGTH);

    try {
      return new Promise<ResponseDFes>(async (resolve, reject) => {
        const ufAutor = 35;
        const cnpjcpf = "06319316000127";
  
        console.log('NFE_DistribuicaoDFePorUltNSU')
        acbrDLL.NFE_DistribuicaoDFePorUltNSU.async(
          ufAutor,
          cnpjcpf,
          num_ult_nsu_recebido,
          aloc_sResposta,
          aloc_esTamanho,
          async (err: any, result: number) => {
            console.log("result", result);
            console.log("err", err);
            try {
              if (err) {
                console.log('err')
                throw new Error(err);
              }
              console.log('checkResult')
              let response: IResponse = await this.checkResult(
                result,
                aloc_sResposta,
                aloc_esTamanho
              );
              
              if (!response.success) {
                console.log('throw new Error')
                throw new Error(response.message);
              }
              console.log('resToJSON')
              const resToJSON = JSON.parse(response.data);
              const { DistribuicaoDFe } = resToJSON;
  
              if (!response.success) {
                console.log('resolve false')
                resolve({
                  success: false,
                  DistribuicaoDFe,
                  message: response.message,
                });
              }
              console.log('resolve true')
              resolve({
                success: true,
                DistribuicaoDFe,
              });
            } catch (e) {
              console.log('reject error')
              console.log({ error: e })
              reject({
                success: false,
                message: (e as Error).message,
              });
            }
          }
        );
      });
    } catch (error) {
      console.log("NFE_DistribuicaoDFePorUltNSU Error: ", error)
    }
  };

 

  • Consultores
Postado

Tópico movido para a área do SAC, para que o SLA de respostas seja considerado

Bom dia!

Por favor, qual é o add-on que você está usando para fazer o bind da Lib?

Se conferirmos nos exemplos disponibilizados pelo SVN, é usado o ffi.

var lib = ffi.Library(pathDllACBrLibCEP, {
    CEP_Inicializar: ['int', ['string', 'string']],
    CEP_Finalizar: ['int', []],
    CEP_BuscarPorCEP: ['int', ['string', tchar, tint]],
})

Caso esteja usando algum que seja diferente, é possível realizar um teste usando o ffi?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Efetuando alguns testes consegui utilizar a lib "segfault-handler" para rastrear o problema e ela para na libacbrnfe64.so.

NFE_DistribuicaoDFePorUltNSU
PID 22001 received SIGSEGV for address: 0x18
/home/node/erp-cloud-recepcao-xml-automatica/.esbuild/.build/node_modules/segfault-handler/build/Release/segfault-handler.node(+0x37a5)[0x7f4b0c0747a5]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x14420)[0x7f4b1088b420]
/lib/x86_64-linux-gnu/libpthread.so.0(pthread_rwlock_wrlock+0x16)[0x7f4b10884d46]
node(CRYPTO_THREAD_write_lock+0x9)[0x196f0a9]
node(ossl_x509v3_cache_extensions+0x3e)[0x19e435e]
node(X509_get_extension_flags+0x11)[0x19e5201]
/usr/local/lib/libssl.so(+0x6c4a5)[0x7f4ae299c4a5]
/usr/local/lib/libssl.so(SSL_CTX_use_certificate+0x2a)[0x7f4ae297421a]
/home/node/erp-cloud-recepcao-xml-automatica/assets/acbr/dllacbrnfe/bin/Linux/libacbrnfe64.so(+0x50a452)[0x7f4af49c2452]
Segmentation fault

  • Consultores
Postado
  • Você está usando Lib ST ou MT?
  • O problema ocorre somente no método DistribuicaoDFePorUltNSU?
    • Se sim, quando devidamente configurada na lib, este método vai salvar para você múltiplos arquivos. No ambiente que está utilizando está tudo OK em questão de permissão de diretórios?
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Estou usando ST.
Sim, até o momento o problema ocorre apenas com o método DistribuicaoDFePorUltNSU.

Sobre o método gravar os multiplos arquivos, consigo configurar onde serão salvos?

Grato pelo retorno!

  • Consultores
Postado
2 minutos atrás, leoprates disse:

Estou usando ST.
Sim, até o momento o problema ocorre apenas com o método DistribuicaoDFePorUltNSU.

Sobre o método gravar os multiplos arquivos, consigo configurar onde serão salvos?

Grato pelo retorno!

Sim, são estas duas propriedades nas suas configurações
image.png

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Diego, bom dia!

Configurei esse parâmetro, mas o erro persiste. No entanto, sua sugestão me levou a uma epifania em relação às permissões de escrita dos arquivos.

Estou direcionando todas as gravações de arquivos para uma pasta "tmp" que está na raiz do projeto, atribuindo permissões de escrita e leitura a essa pasta. Apesar disso, o erro continua. No entanto, se eu conceder permissão de escrita à raiz do projeto, o sistema funciona.

Você saberia me dizer se a biblioteca poderia estar criando arquivos temporários na raiz e se existe alguma maneira de apontar a criação deles para outra pasta?

  • Consultores
Postado
21 minutos atrás, leoprates disse:

Diego, bom dia!

Configurei esse parâmetro, mas o erro persiste. No entanto, sua sugestão me levou a uma epifania em relação às permissões de escrita dos arquivos.

Estou direcionando todas as gravações de arquivos para uma pasta "tmp" que está na raiz do projeto, atribuindo permissões de escrita e leitura a essa pasta. Apesar disso, o erro continua. No entanto, se eu conceder permissão de escrita à raiz do projeto, o sistema funciona.

Você saberia me dizer se a biblioteca poderia estar criando arquivos temporários na raiz e se existe alguma maneira de apontar a criação deles para outra pasta?

Bom dia.

Buscando aqui, a princípio, não encontrei nada que indique esse comportamento para Lib.

Vou verificar junto ao resto do time.

A entrada no log foi gerada normal e o processo ocorreu sem  erros dando permissão na raiz do projeto?

Esse diretório "tmp", você configurou ele na lib passando caminho absoluto?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Boa tarde! 

Isso mesmo, o processo ocorreu sem erros localmente dando a permissão na raiz do projeto. 
O diretório "tmp" está configurando com caminho absoluto sim.

Infelizmente na lambda da aws, por padrão, só posso dar permissão de escrita ao diretório tmp.

att,

  • Membros Pro
Postado

Agora estou conseguindo capturar o log e ele termina exatamente assim:
 

06/10/23 14:00:24:585 - TLibNFeConfig.AplicarConfiguracoes: ./tmp/acbrlib.ini
06/10/23 14:00:24:585 - Travar
06/10/23 14:00:24:585 - TLibNFeConfig.AplicarConfiguracoes - Feito
06/10/23 14:00:24:585 - Destravar
06/10/23 14:00:24:585 - TLibNFeConfig.Ler - Feito
06/10/23 14:00:24:585 - Destravar
06/10/23 14:00:24:585 - TACBrLibNFe.Inicializar - Feito
06/10/23 14:00:24:585 - LIB_Inicializar( ./tmp/acbrlib.ini,  )
06/10/23 14:00:24:585 -    ACBrLibNFE - 0.4.6.251
06/10/23 14:00:24:585 - TACBrLibNFe.PrecisaCriptografar(DFe,Senha)
06/10/23 14:00:24:586 - TACBrLibNFe.PrecisaCriptografar - Feito Result: True
06/10/23 14:00:24:586 - LIB_ConfigGravarValor(DFe, Senha, *********)
06/10/23 14:00:24:586 - TACBrLibNFe.PrecisaCriptografar(DFe,Senha)
06/10/23 14:00:24:586 - TACBrLibNFe.PrecisaCriptografar - Feito Result: True
06/10/23 14:00:24:586 - TLibNFeConfig.AjustarValor(tfGravar,DFe,Senha,*********)
06/10/23 14:00:24:586 - TLibNFeConfig.AjustarValor - Feito
06/10/23 14:00:24:586 - TLibNFeConfig.AplicarConfiguracoes: ./tmp/acbrlib.ini
06/10/23 14:00:24:586 - Travar
06/10/23 14:00:24:586 - TLibNFeConfig.AplicarConfiguracoes - Feito
06/10/23 14:00:24:586 - Destravar
06/10/23 14:00:24:586 -    SetRetorno(0, )
06/10/23 14:00:24:675 - NFe_DistribuicaoDFePorUltNSU(35,06319316000127,000000000001135)
06/10/23 14:00:24:675 - Travar
06/10/23 14:00:24:676 - NFe_DistribuicaoDFePorUltNSU, Executar
  • Consultores
Postado

A princípio, parece ser um problema de permissão de pastas.

Você citou anteriormente que está direcionando para uma pasta tmp com permissão de leitura e escrita.

Como você configurou esta pasta no seu arquivo de configurações?

Pode disponibilizar o ACBrLib.ini para análise?

Se julgar que o mesmo tenha dados sensíveis, envie para [email protected] com o link do tópico no corpo do e-mail para posterior identificação.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado
11 minutos atrás, leoprates disse:

Sobre a permissão de pastas, mesmo executando um chmod -R 777 o erro é retornado.
Segue ACBrLib.ini:

acbrlib.ini 5.08 kB · 0 downloads

É o mesmo caminho que definiu para o PathNFe, PathInu e PathEventos.

Esses XMLs são salvos na pasta corretamente?

Outra coisa a se observar.

Citar

AdicionarLiteral=0
SepararPorCNPJ=0
SepararPorIE=0
SepararPorModelo=0
SepararPorAno=0
SepararPorMes=0
SepararPorDia=0
Download.PathDownload=./tmp/
Download.SepararPorNome=1

Você não definiu nenhuma configuração que gere um novo diretório dentro do caminho definido para os XMLs da NF-e.

Mas definiu no DistribuicaoDFe para que ele separe por nome gerando novo diretório dentro do /tmp.

Faça um teste definindo alguma das configurações:

Citar

AdicionarLiteral=0
SepararPorCNPJ=0
SepararPorIE=0
SepararPorModelo=0
SepararPorAno=0
SepararPorMes=0
SepararPorDia=0

Veja se não ocorre o mesmo problema.

Se acontecer, é mais um indício de ser problema de permissão de pasta.

Se você executar um ls -l neste diretório, ele trás as informações de permissão correspondentes ao que foi definido pelo chmod?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Diego, efetuei alguns testes aqui alterando esses parâmetros, criando pastas especificas dentro da "tmp" para os PathNFe, PathInu e PathEventos, alterando o Download.SepararPorNome como 0 (não) e mesmo assim enfrento o mesmo problema.
Já efetuei diversas tratativas de configuração para liberação de escrita nas pastas.

Não apenas na lambda da AWS mas também localmente no meu WSL Ubuntu eu enfrento esse problema. 
Os arquivos de logs são gerados corretamente dentro da pasta "./tmp/acbr/logs" e os reports dentro da pasta "./tmp/acbr/reports/".

Tenho um microsserviço de emissão rodando onde utilizo diversos métodos como "NFE_Assinar", "NFE_Validar", NFE_GravarXML", etc e não tenho o erro de Segmentation Fault nele.

Também pensei que pudesse ser algo relacionado a permissão, mas já verifiquei esse ponto diversas vezes.

 

  • Membros Pro
Postado

Se eu não utilizar o método NFE_DistribuicaoDFePorUltNSU e utilizar um mock json no padrão do retorno esperado, não é apresentado o erro e o código executa corretamente.

  • Membros Pro
Postado

Diego, pelo windows usando a dll eu consigo executar e gera o erro conforme log abaixo. 
Talvez sanando esse erro ele passe a funcionar no linux?

 

09/10/23 14:51:46:832 -    SetRetorno(0, )
09/10/23 14:51:46:976 - NFe_DistribuicaoDFePorUltNSU(35,06319316000127,000000000001135)
09/10/23 14:51:46:977 - Travar
09/10/23 14:51:46:977 - NFe_DistribuicaoDFePorUltNSU, Executar
09/10/23 14:51:47:028 - Destravar
09/10/23 14:51:47:029 -    SetRetorno(-16, WebService Distribuição de DFe:
- Inativo ou Inoperante tente novamente.
Erro Interno: -2
Erro HTTP: 500
error:140AB18E:SSL routines:func(171):reason(398)
 
  MotivoRetornadoDoWebService: "")
  • Consultores
Postado
25 minutos atrás, leoprates disse:

Diego, pelo windows usando a dll eu consigo executar e gera o erro conforme log abaixo. 
Talvez sanando esse erro ele passe a funcionar no linux?

 

09/10/23 14:51:46:832 -    SetRetorno(0, )
09/10/23 14:51:46:976 - NFe_DistribuicaoDFePorUltNSU(35,06319316000127,000000000001135)
09/10/23 14:51:46:977 - Travar
09/10/23 14:51:46:977 - NFe_DistribuicaoDFePorUltNSU, Executar
09/10/23 14:51:47:028 - Destravar
09/10/23 14:51:47:029 -    SetRetorno(-16, WebService Distribuição de DFe:
- Inativo ou Inoperante tente novamente.
Erro Interno: -2
Erro HTTP: 500
error:140AB18E:SSL routines:func(171):reason(398)
 
  MotivoRetornadoDoWebService: "")

A princípio parece ser problema com a OpenSSL.

Você está usando a versão 1.1.1.0 ? Qual configuração de SSLType está usando?

Está URL corresponde a do ambiente de homologação, é neste ambiente que está testando ?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Sim, estamos utilizando a versão 1.1.1 conforme o trecho do dockerfile abaixo.

SSLType:
[DFe]
SSLCryptLib
=1 -> cryOpenSSL
SSLHttpLib
=3 -> httpOpenSSL
SSLXmlSignLib
=4 -> xsLibXml2

Ambiente:
[NFe]

Ambiente=1 -> Homologação

Versão OpenSSL:

# Install specific OpenSSL version
RUN wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1q.tar.gz \
    && tar -zxf openssl-1.1.1q.tar.gz \
    && cd openssl-1.1.1q \
    && ./config && make && make install \
    && ln -s /usr/local/lib/libssl.so.1.1  /usr/lib/libssl.so.1.1 \
    && ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
  • Consultores
Postado
21 minutos atrás, leoprates disse:

Chequei novamente o SSL e aparenta estar corretamente instalado.
Alguma outra possibilidade?

Vou pedir apoio aos demais consultores.

 

Em 09/10/2023 at 11:34, leoprates disse:

Sobre a permissão de pastas, mesmo executando chmod -R 777 e chmod o+x o erro é retornado.
Segue ACBrLib.ini:

acbrlib.ini 5.08 kB · 2 downloads

Por favor, apenas para confirmar.

Você está configurando Arquivo PFX e Senha na Lib, correto?

Você apenas removeu está informação para disponibilizar o acbrlib.ini, certo?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Fundadores
Postado
Em 05/10/2023 at 11:46, leoprates disse:
const BUFF_LENGTH = 1024;

Olhando rapidamente... Eu acho que esse Buffer está pequeno para alocar toda a resposta do comando...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Este tópico foi criado há 401 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.