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 |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE: 253, 391 |
Errno not reset
| Find defects (-checkers)
| Misuse of errno
| Returned value of a sensitive function not checked