V3064. Division or mod division by zero.
Анализатор обнаружил ситуацию, когда может произойти деление на ноль.
Рассмотрим пример:
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 как критические и относятся к типу: Ошибки деления на ноль. |
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3064. |