Weaknesses of type CWE-195

22 results

Erro de conversão de inteiro com sinal para sem sinal

Ocorre quando um valor inteiro com sinal (que pode ser negativo) é convertido ou comparado com um tipo sem sinal, causando comportamento inesperado. Um número negativo, quando interpretado como sem sinal, vira um valor muito grande, podendo contornar validações ou causar alocações excessivas de memória.

Example

Um desenvolvedor valida se um `int` (com sinal) recebido do usuário é menor que 100 antes de alocar um buffer. Se o valor for -1, a comparação com 100 passa na validação, mas ao converter para `unsigned int` para usar em malloc(), -1 vira 4.294.967.295 bytes — causando falha ou overflow.

How to mitigate

Sempre validar o sinal antes de converter para tipo sem sinal; preferir manter cálculos em tipos com sinal quando possível; usar compiladores com avisos para conversões implícitas ativados (-Wsign-conversion no GCC/Clang); implementar validação explícita do intervalo de valores esperados.