﻿# V3064\. Division or mod division by zero\.

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

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

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

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

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

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

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

```cpp
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` перед делением:

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