Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V3064. Division or mod division by zero.
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V3064. Division or mod division by zero.

25 Фев 2016

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

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

if (maxHeight >= 0)
{
  fx = height / maxHeight;
}

В условии проверяется, что значение переменной maxHeight неотрицательно. Если эта переменная будет равна нулю, то внутри условия произойдёт деление на 0. Чтобы исправить ситуацию, необходимо выполнять деление только в том случае, когда maxHeight положительно.

Исправленный вариант:

if (maxHeight > 0)
{
  fx = height / maxHeight;
}

Деление на значение, полученное из внешнего источника, небезопасно:

void Division()
{
  var divisibleStr = Request.QueryString["divisible"];
  var dividerStr = Request.QueryString["divider"];

  if (   Int32.TryParse(divisibleStr, out int divisible)
      && Int32.TryParse(dividerStr, out int divider))
  {
    int difference = divisible / divider;
  }
}

Значение для dividerStr, полученное из внешнего источника, конвертируется в переменную divider типа int. Далее divider выступает в качестве делителя. Это может привести к делению на 0.

Для исправления потенциальной проблемы нужно проверить divider перед делением:

void Division()
{
  var divisibleStr = Request.QueryString["divisible"];
  var dividerStr = Request.QueryString["divider"];

  if (   Int32.TryParse(divisibleStr, out int divisible)
      && Int32.TryParse(dividerStr, out int divider)
      && divider != 0) // <=
  {
    int difference = divisible / divider;
  }
}

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

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

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3064.