Skip to content

fix: corrige erro de inserção de chave duplicada no cachê do certificado digital#1680

Open
AgnaldoSilva0 wants to merge 1 commit intoZeusAutomacao:masterfrom
AgnaldoSilva0:Branch_25415
Open

fix: corrige erro de inserção de chave duplicada no cachê do certificado digital#1680
AgnaldoSilva0 wants to merge 1 commit intoZeusAutomacao:masterfrom
AgnaldoSilva0:Branch_25415

Conversation

@AgnaldoSilva0
Copy link
Contributor

Fix:

  • Alterado uso do Dictionary para ConcurrentDictionary, a fim de lidar com a concorrência na propriedade estática do cachê do certificado;
  • Corrigido condicional para verificar também o SerialNumber.

Erro:

  • Exce��o Sem Tratamento: System.ArgumentException: J� foi adicionado um item com a mesma chave.
    em System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
    em System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
    em DFe.Utils.Assinatura.CertificadoDigital.ObterCertificado(ConfiguracaoCertificado configuracaoCertificado) na D:\Repositorios\DFe.NET_Branch_25395\DFe.Utils\Assinatura\CertificadoDigital.cs:linha 227

Cenários:

  • O erro ocorria quando a configuração recebida possuía o campo CacheId nulo, mas o dicionário já continha um certificado armazenado com a mesma chave. Esse cenário é bastante comum, pois normalmente uma nova instância de configuração é criada a cada transação. Como essa nova configuração inicia com CacheId nulo, o método tentava adicionar novamente ao dicionário uma chave que já existia, resultando na exceção.
  • Além disso, o erro também podia ocorrer em situações de concorrência, quando múltiplas threads tentavam inserir simultaneamente no dicionário um certificado com a mesma chave. Nesses casos, como o método original utilizava Add, apenas a primeira inserção era bem-sucedida, enquanto as demais geravam exceção.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant