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