errno
не проверяется на состояние ошибки после вызова функции
Этот дефект происходит, когда вы вызываете функцию, которая устанавливает errno
указать на состояние ошибки, но не проверять errno
после вызова. Для этих функций, проверяя errno
единственный надежный путь состоит в том, чтобы определить, произошла ли ошибка.
Функции, которые устанавливают errno
при ошибках включайте:
fgetwc
, strtol
, и wcstol
.
Для всестороннего списка функций см. документацию о errno.
POSIX® errno
- установка функций, таких как encrypt
и setkey
.
Чтобы видеть если вызов функции, завершенный без ошибок, проверяйте errno
для ошибочных значений.
Возвращаемые значения их errno
- устанавливающие функции не указывают на ошибки. Возвращаемое значение может быть одним из следующего:
void
Даже если ошибка происходит, возвращаемое значение может совпасть со значением от успешного вызова. Такие возвращаемые значения называются внутриполосными ошибочными индикаторами.
Можно определить, произошла ли ошибка только путем проверки errno
.
Например, strtol
преобразует строку в длинное целое и возвращает целое число. Если результат переполнения преобразования, функция возвращает LONG_MAX
и наборы errno
к ERANGE
. Однако функция может также возвратить LONG_MAX
от успешного преобразования. Только путем проверки errno
можно ли различать ошибку и успешное преобразование.
Прежде, чем вызвать функцию, набор errno
обнулять.
После вызова функции, чтобы видеть, произошла ли ошибка, сравнивают errno
обнулять. В качестве альтернативы сравните errno
к известным ошибочным значениям индикатора. Например, strtol
наборы errno
к ERANGE
указать на ошибки.
Сообщение об ошибке в результате Polyspace® показывает ошибочное значение индикатора, что можно выдержать сравнение с.
Группа: безопасность |
Язык: C | C++ |
Значение по умолчанию: Off |
Синтаксис командной строки: ERRNO_NOT_CHECKED |
Удар: носитель |
ID CWE: 253, 391 |
Errno not reset
| Find defects (-checkers)
| Misuse of errno
| Returned value of a sensitive function not checked