errno
не проверяется на состояние ошибки после вызова функции
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