Weaknesses of type CWE-1077

6 results

Comparação de ponto flutuante com operador incorreto

Ocorre quando código compara números de ponto flutuante (float, double) usando operadores de igualdade (== ou !=) em vez de comparações com margem de tolerância. Devido a imprecisões de arredondamento inerentes à representação binária, duas variáveis que deveriam ser iguais logicamente podem nunca ser exatamente iguais em memória, causando comportamentos inesperados ou desvios de fluxo de segurança.

Example

Um aplicativo de pagamento que verifica `if (saldo == 0.0)` para bloquear saque pode falhar porque operações anteriores deixaram saldo em 0.0000000001 ou -0.0000000001. Ou validação de autenticação que compara timestamp com `==` e permite bypass por diferença mínima em arredondamento.

How to mitigate

Use comparação com epsilon (tolerância): `if (Math.abs(a - b) < EPSILON)` em vez de `a == b`. Alternativamente, represente valores monetários ou críticos como inteiros (centavos) ao invés de float, ou use bibliotecas de precisão arbitrária quando necessário.