Falhas do tipo CWE-469

1 resultado

Uso de subtração de ponteiros para determinar tamanho

Ocorre quando o código tenta calcular o tamanho de uma região de memória subtraindo dois ponteiros, assumindo que ambos apontam para objetos contíguos do mesmo tipo. O problema é que essa aritmética é indefinida se os ponteiros não pertencem ao mesmo array ou alocação, levando a resultados imprevisíveis e potencialmente a leitura ou escrita além dos limites da memória.

Exemplo

Um aplicativo tenta determinar quantos elementos existem em um buffer fazendo `(ptr_fim - ptr_inicio) / sizeof(tipo)`, mas se os ponteiros forem de alocações diferentes ou se um deles for inválido, o resultado é lixo, causando um buffer overflow ou underflow ao se usar esse tamanho calculado.

Como mitigar

Mantenha registro explícito do tamanho ou capacidade das alocações de memória em estruturas (metadata), em vez de tentar recalculá-lo a partir de ponteiros. Use funções seguras que recebem tamanho como parâmetro, e valide sempre que dois ponteiros realmente pertencem à mesma região antes de operações aritméticas.