Falhas do tipo CWE-195

22 resultados

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

Ocorre quando um valor inteiro com sinal (que pode ser negativo) é convertido para sem sinal sem validação prévia. Um número negativo, ao ser reinterpretado como sem sinal, vira um número muito grande, causando lógica quebrada em comparações, alocações de memória ou loops.

Exemplo

Uma função recebe um inteiro com sinal do usuário, usa-o em uma comparação de tamanho (ex: if (tamanho < 1000) alocaMem(tamanho)) e depois o converte para sem sinal. Um valor negativo passa na comparação, vira um número gigante ao ser convertido, e a alocação fica fora de controle.

Como mitigar

Valide explicitamente que valores com sinal são não-negativos antes de qualquer conversão para sem sinal. Use verificações de range claras e evite conversões implícitas; em C/C++, compile com avisos de conversão ativados (-Wconversion).