Fallos del tipo CWE-194

5 resultados

Extensão de sinal inesperada

Ocorre quando um valor é convertido de um tipo de dado menor para um maior e o bit de sinal é estendido automaticamente, alterando o valor esperado. Em linguagens como C/C++, converter um `char` negativo para `int` sem cuidado propaga o sinal, transformando -1 em -1 (ou 0xFFFFFFFF em inteiros de 32 bits), causando comportamentos lógicos incorretos em validações, comparações ou operações aritméticas.

Ejemplo

Um validador de tamanho de arquivo lê um byte não assinado (0xFF, representando 255 bytes) e o atribui a uma variável `char` assinado, que interpreta como -1. Uma comparação posterior `if (tamanho < 1000)` passa, embora o buffer alocado seja pequeno, levando a estouro de memória.

Cómo mitigar

Use tipos explícitos e sem sinal (`unsigned char`, `uint32_t`) para valores que não devem ser negativos. Valide conversões de tipo e use análise estática ou compiladores com flags de aviso (`-Wsign-conversion`) para detectar extensões inesperadas em tempo de compilação.