Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V8036. A meaningless comparison with a variable of an unsigned type.

06 Авг 2026

Анализатор обнаружил бессмысленное сравнение числовых значений, результат которого всегда true или false.

Пример ошибочного кода:

func IncrementNonce(key []byte, keySize uint) {
  ....
  for k := keySize - 3; k >= 0; k-- {
    key[k]++
    if key[k] != 0 {
      break
    }
  }
}

В данном примере сравнение k >= 0 не имеет смысла, т. к. результат всегдаtrue, поскольку переменная k имеет тип uint и не может принимать отрицательные значения. А при попытке вычесть шаг цикла из счётчикаk, имеющего нулевое значение, переменная k примет максимальное значение типа uint. Таким образом, цикл for будет бесконечным.

Вариант корректного кода:

func IncrementNonce(key []byte, keySize uint) {
  ....
  for k := keySize - 2; k > 0; k-- {
    key[k - 1]++
    if key[k - 1] != 0 {
      break
    }
  }
}

В данном случае цикл будет остановлен, как только переменная k примет значение 0.

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