| Предыдущий | Следующий |
| ERROR_USER_PROFILE_LOAD | ERROR_PIPE_CONNECTED |
ERROR_ARITHMETIC_OVERFLOW
description[результат вычисления вышел за пределы поддерживаемого целочисленного диапазона.]Результат арифметической операции превысил поддерживаемый диапазон
ERROR_ARITHMETIC_OVERFLOW означает, что целочисленное вычисление или преобразование не может быть представлено в типе назначения. Классическое сообщение упоминает 32 бита, но практическая проблема заключается в небезопасном преобразовании диапазона.
Распространённые причины
- Умножение количества элементов на их размер без проверки переполнения.
- Преобразование размеров файлов, смещений или временных меток в более узкий тип.
- Смешивание знаковых и беззнаковых значений.
- Вычисление размеров буферов из недоверенных входных данных.
Диагностика
Запишите операнды, исходный и целевой типы и точку преобразования. Проверьте граничные значения, ноль, отрицательные входы и значения около максимально представимого размера. Статический анализ и проверки переполнения компилятора позволяют обнаружить многие пути.
Правильная обработка
Используйте функции проверяемой арифметики до выделения памяти или ввода-вывода. Отклоняйте невозможные запросы вместо молчаливого зацикливания по модулю или насыщения. Храните размеры и смещения в типах, достаточно широких для платформы и контракта API.
Важность для безопасности
Непроверенное переполнение может превратить большой логический размер в маленькое выделение памяти и привести к повреждению буфера. Рассматривайте ошибки переполнения на границах доверия как ошибки проверки входных данных, а не как редкие исключительные случаи.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.