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