>
>
>
V3217. Possible overflow as a result of…


V3217. Possible overflow as a result of an arithmetic operation.

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

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

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;
    }

    ....
}

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