Если функция сгенерирует информацию об ошибке, то та информация об ошибке должна быть протестирована
Если функция сгенерирует информацию об ошибке, то та информация об ошибке должна быть протестирована.
Если вы не проверяете возвращаемое значение функций, которые указывают на информацию об ошибке через их возвращаемые значения, ваша программа может неожиданно вести себя. Ошибки от этих функций могут распространить в программе, вызывающей неправильный выход, уязвимости системы обеспечения безопасности, и возможно системные отказы.
Для errno
- установка функций, чтобы видеть, если вызов функции, завершенный без ошибок, проверяет errno
для ошибочных значений. Возвращаемые значения их errno
- устанавливающие функции не указывают на ошибки. Возвращаемое значение может быть одним из следующего:
void
Даже если ошибка происходит, возвращаемое значение может совпасть со значением от успешного вызова. Такие возвращаемые значения называются внутриполосными ошибочными индикаторами. Например, strtol
преобразует строку в длинное целое и возвращает целое число. Если результат переполнения преобразования, функция возвращает LONG_MAX
и наборы errno
к ERANGE
. Однако функция может также возвратить LONG_MAX
от успешного преобразования. Только путем проверки errno
можно ли различать ошибку и успешное преобразование.
Для errno
- устанавливая функции, можно определить, произошла ли ошибка только путем проверки errno
.
Средство проверки повышает нарушение когда:
Вы вызываете чувствительные функции, которые возвращают информацию о возможных ошибках, и затем вы игнорируете возвращаемое значение или используете выход функции, не тестируя возвращаемое значение.
Средство проверки покрывает функцию от стандартной библиотеки и других известных библиотек, таких как библиотека POSIX или библиотека WinAPI. Polyspace® рассматривает функцию как чувствительную, если вызов функции подвержен отказу из-за причин, таких как:
Исчерпанные системные ресурсы (например, при выделении ресурсов).
Измененные привилегии или полномочия.
Испорченные источники при чтении, при записи или преобразовании данных из внешних источников.
Неподдерживаемые функции несмотря на существующий API.
Polyspace считает функцию критическим чувствительным, когда они выполняют критические задачи, такие как:
Установите привилегии (например, setuid
)
Создайте тюрьму (например, chroot
)
Создайте процесс (например, fork
)
Создайте поток (например, pthread_create
)
Заблокируйте или разблокируйте взаимное исключение (например, pthread_mutex_lock
)
Заблокируйте или разблокируйте сегменты памяти (например, mlock
)
Для функций, которые не очень важны, не отмечается средство проверки, если вы явным образом игнорируете возвращаемое значение путем кастинга его к void
. Явным образом игнорирование возвращаемого значения критических чувствительных функций отмечается Polyspace.
Вы вызываете функцию, которая устанавливает errno
указать на состояние ошибки, но не проверять errno
после вызова. Для этих функций, проверяя errno
единственный надежный путь состоит в том, чтобы определить, произошла ли ошибка.
Функции, которые устанавливают errno
при ошибках включайте:
fgetwc
, strtol
, и wcstol
.
Для всестороннего списка функций см. документацию о errno.
POSIX®errno
- установка функций, таких как encrypt
и setkey
.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: независимые от языка проблемы |
Категория: необходимый |