Falhas do tipo CWE-1077

6 resultados

Comparação de Ponto Flutuante com Operador Incorreto

Quando o código usa operadores de comparação (==, !=, <, >) diretamente em números de ponto flutuante sem considerar erros de precisão aritmética. Números em ponto flutuante têm representação binária imprecisa, causando resultados inesperados em comparações — por exemplo, 0.1 + 0.2 pode não ser exatamente igual a 0.3. Isso leva a lógica de negócio quebrada, decisões de segurança falhando ou desvios de validação.

Exemplo

Um validador de transação bancária verifica `if (valor_digitado == valor_esperado)` usando floats. Um usuário consegue contornar a validação porque 99.99 + 0.01 em ponto flutuante não é exatamente 100.00. Ou um controle de acesso baseado em threshold (`if (risco >= 0.5)`) falha porque o cálculo de risco retorna 0.50000000001.

Como mitigar

Use comparação com tolerância (epsilon): `if (Math.abs(a - b) < epsilon)` em vez de `a == b`. Ou, quando possível, trabalhe com inteiros (centavos em vez de reais, valores percentuais x100). Em validações críticas, use bibliotecas de precisão arbitrária (BigDecimal em Java, Decimal em Python).