Fallos del tipo CWE-195
22 resultadosErro de conversão de sinal para sem sinal
Ocorre quando um valor inteiro com sinal (negativo ou positivo) é convertido para inteiro sem sinal sem validação prévia. Se o valor original é negativo, a conversão resulta em um número muito grande (devido à representação em complemento de dois), causando comportamentos inesperados como leituras fora dos limites de buffers, loops infinitos ou desvios de validações de segurança.
Um desenvolvedor lê um tamanho de dados de um arquivo (int com sinal) e passa direto para malloc() ou memcpy() que esperam um unsigned int. Se o arquivo contiver -1, a conversão automática transforma isso em 4294967295 bytes em uma máquina 32-bit, alocando memória gigantesca ou copiando dados além do esperado.
Valide sempre valores com sinal antes de converter para sem sinal: verifique se o valor é >= 0 e menor que o limite esperado. Use tipos explícitos em casts e ferramentas de análise estática para detectar conversões suspeitas. Em C, prefira operações que não façam conversão implícita entre os tipos.