Top.Mail.Ru
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V6130. Integer overflow in...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V6130. Integer overflow in arithmetic expression.

26 Май 2025

Анализатор обнаружил арифметическую операцию, в результате которой возможно переполнение целочисленного числа.

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

private static long parseHumanLong(String str) {
    char tail = str.charAt(str.length() - 1);
    long base = 1;
    switch (tail) {
        case 't':
            base *= 1000 * 1000 * 1000 * 1000;
            break;
        case 'b':
            base *= 1000 * 1000 * 1000;
            break;
        case 'm':
            base *= 1000 * 1000;
            break;
        case 'k':
            base *= 1000;
            break;
        default:
    }
    if (base != 1) {
        str = str.substring(0, str.length() - 1);
    }
    return Long.parseLong(str) * base;
}

Данный метод считывает числа и переводит окончания чисел в:

  • t — триллион;
  • b — миллиард;
  • m — миллион;
  • k — тысяча.

Ожидается, что если в метод придёт строка 1m, то она преобразуется в переменную формата long со значением 1_000_000.

При расчёте триллионов в выражении 1000 * 1000 * 1000 * 1000 происходит переполнение, так как умножение выполняется в пределах int, а итоговое число превышает максимальное значение для типа int. Это приводит к неверному результату.

Чтобы вычисление было корректным, нужно явно указать выражению тип Long:

base *= 1000L * 1000 * 1000 * 1000;

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

close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
close form
Я хочу принять участие в тестировании
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам