Weaknesses of type CWE-196
7 resultsErro de conversão de inteiro sem sinal para com sinal
Ocorre quando um valor inteiro sem sinal (unsigned) é convertido para com sinal (signed) sem validação, causando interpretação incorreta do número. Se o valor unsigned é maior que o máximo do signed (ex: 2147483648 em um int de 32 bits), o resultado se torna negativo, quebrando lógica de validação e segurança que depende de valores positivos.
Uma função recebe um tamanho de buffer como unsigned int, valida se é menor que MAX_SIZE, e o converte para int para passar a malloc(). Um atacante envia 2147483648 (que passa na validação unsigned), mas se torna -1 em int, fazendo malloc() alocar um minúsculo buffer — causando overflow na cópia de dados.
Validar o valor antes de converter: garantir que um unsigned não ultrapasse o máximo seguro do signed equivalente. Melhor: usar tipos unsigned consistentemente em lógica de tamanhos e buffers, ou usar bibliotecas que fazem conversão segura com checagem de overflow.