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