Анализатор обнаружил арифметическую операцию, в результате которой возможно переполнение.
Рассмотрим пример:
private const int _halfMaximumValue = int.MaxValue / 2;
public void Calculate(int summand)
{
int sum;
if (summand > _halfMaximumValue + 1)
{
sum = _halfMaximumValue + summand;
}
....
}
В методе Calculate
высчитывается сумма переданного параметра и константы. Константа равна половине от максимального значения System.Int32
. Перед сложением проверяется значение параметра, чтобы избежать арифметического переполнения.
Однако в условии была допущена ошибка. В данном случае проверяется, что summand
больше, чем _halfMaximumValue + 1
. Если это условие будет истинным, то при сложении гарантированно произойдёт арифметическое переполнение.
Чтобы проверка выполнялась корректно, нужно заменить оператор >
на <
:
private const int _halfMaximumValue = int.MaxValue / 2;
public void Calculate(int summand)
{
int sum;
if (summand < _halfMaximumValue + 1)
{
sum = _halfMaximumValue + summand;
}
....
}
Данная диагностика классифицируется как: