# V5308. OWASP. Possible overflow. The expression will be evaluated before casting. Consider casting one of the operands instead.

Анализатор обнаружил подозрительное приведение типов. Результат бинарной операции приводится к типу с большим диапазоном.

Рассмотрим пример:

    long multiply(int a, int b) {
        return (long)(a * b);
    }

Такое преобразование избыточно. Тип 'int' и так бы автоматически расширился до типа 'long'.

Скорее всего, подобный паттерн приведения используется для защиты от переполнения, но он неправильный. При перемножении переменных типа 'int' всё равно произойдёт переполнение, и только уже бессмысленный результат умножения будет явно расширен до типа 'long'.

Для корректной защиты от переполнения можно привести один из аргументов к типу 'long'. Исправленный код:

    long multiply(int a, int b) {
        return (long)a * b;
    }

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки целочисленного переполнения и некорректного совместного использования знаковых и беззнаковых чисел.

Данная диагностика классифицируется как:

CWE-190 CWE-191 OWASP-5.4.3 CERT-NUM00-J