Fallos del tipo CWE-196
7 resultadosErro 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 adequada. Se o valor unsigned for maior que o máximo representável no tipo signed, o resultado fica imprevisível ou negativo, quebrando lógica de segurança como validações de tamanho ou limite de acesso.
Um programa recebe um tamanho de buffer como unsigned int (até 4 bilhões), converte para int assinado sem checar, e usa em memcpy(). Um valor grande como 2 bilhões vira negativo após conversão, bypassing a validação de limite e causando buffer overflow.
Valide o valor antes da conversão, garantindo que ele cabe no intervalo do tipo de destino. Use tipos consistentes em toda a lógica de segurança (preferir unsigned para tamanhos/comprimentos) ou faça conversões explícitas com bounds checking.