errno
неправильно проверяемый на состояние ошибки
Этот дефект происходит, когда вы проверяете errno
для состояния ошибки в ситуациях, где проверка errno
не гарантирует отсутствия ошибок. В некоторых случаях, проверка errno
может привести к ложным положительным сторонам.
Например, вы проверяете errno
следующие вызовы функций:
fopen
: Если вы следуете Стандарту ISO®, функциональная сила не установила errno
при ошибках.
atof
: Если вы следуете стандарту ISO, функция не устанавливает errno
.
signal
: errno
значение указывает на ошибку, только если функция возвращает SIG_ERR
ошибочный индикатор.
Стандарт ISO C не осуществляет это, эти функции устанавливают errno
при ошибках. Устанавливают ли функции errno
или не является зависящим от реализации.
Обнаружить ошибки, если вы проверяете errno
один, валидность этой проверки также становится зависящей от реализации.
В некоторых случаях, errno
значение указывает на ошибку, только если функция возвращает определенный ошибочный индикатор. Если вы проверяете errno
прежде, чем проверять функциональное возвращаемое значение, вы видите ложные положительные стороны.
Для получения информации о том, как обнаружить ошибки, см. документацию для той определенной функции.
Как правило, функции возвращают внеполосный ошибочный индикатор, чтобы указать на ошибки. Например:
fopen
возвращает нулевого указателя, если ошибка происходит.
signal
возвращает SIG_ERR
ошибочный индикатор и наборы errno
к положительному значению. Проверяйте errno
только после того, как вы проверяли функциональное возвращаемое значение.
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода |
Синтаксис командной строки: ERRNO_MISUSE |
Удар: высоко |
ID CWE: 703 |
Errno not checked
| Errno not reset
| Find defects (-checkers)
| Returned value of a sensitive function not checked
| Unsafe conversion from string to numerical value