Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08
Анализатор обнаружил бессмысленное сравнение числовых значений, результат которого всегда 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.
Диагностическое правило классифицируется как:
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок: