Аргумент к стандартной функции не удовлетворяет требования для использования в функции
Этот дефект происходит, когда аргументы к функциям определенного стандарта не удовлетворяют требования для своего использования в функциях.
Например, аргументы к этим функциям могут быть недопустимыми следующими способами.
| Функциональный тип | Ситуация | Риск | Фиксация |
|---|---|---|---|
Обработка строк функционирует, такие как strlen и strcpy | Аргументы указателя не указывают на NULL- отключенная строка. | Поведение функции не определено. | Передайте NULL- отключенная строка к функциям обработки строк. |
Обработка файла функционирует в stdio.h такой как fputc и fread | FILE* аргумент указателя может иметь значение NULL. | Поведение функции не определено. | Протестируйте FILE* указатель для NULL перед использованием его как аргумент функции. |
Обработка файла функционирует в unistd.h такой как lseek и read | Аргумент дескриптора файла может быть-1. | Поведение функции не определено. Большинство реализаций | Протестируйте возвращаемое значение Если возвращаемое значение-1, проверяйте значение |
| Аргумент дескриптора файла представляет закрытый дескриптор файла. | Поведение функции не определено. | Закройте дескриптор файла только после того, как вы полностью закончите использовать его. В качестве альтернативы вновь откройте дескриптор файла перед использованием его как аргумент функции. | |
Генерация имени каталога функционирует, такие как mkdtemp и mkstemps | Последними шестью символами шаблона строки не является XXXXXX. | Функция заменяет последние шесть символов на строку, которая делает имя файла уникальным. Если последними шестью символами не является XXXXXX, функция не может сгенерировать достаточно уникальное имя каталога. | Протестируйте, если последними шестью символами строки является XXXXXX перед использованием строки как аргумент функции. |
Функции, связанные с переменными окружения, такими как getenv и setenv | Аргументом строки является "". | Поведение задано реализацией. | Протестируйте аргумент строки на "" перед использованием его как getenv или setenv аргумент. |
Аргумент строки завершает работу со знаком "равно", =. Например, "C=" вместо "C". | Поведение задано реализацией. | Не отключайте аргумент строки с =. | |
Представьте в виде строки функции обработки, такие как strtok и strstr |
| Некоторые реализации не обрабатывают эти случаи ребра. | Протестируйте строку для "" перед использованием его как аргумент функции. |
Фиксация зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Можно реализовать закрепление на любом событии в последовательности. Если детали результата не показывают историю события, можно проследить использование, щелкните правой кнопкой по опциям по исходному коду и смотрите предыдущие связанные события. См. также Интерпретируют Результаты Polyspace Bug Finder.
Смотрите примеры мер ниже.
Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.
| Группа: Программирование |
| Язык: C | C++ |
| Значение по умолчанию: на |
Синтаксис командной строки: STD_FUNC_ARG_MISMATCH |
| Удар: носитель |
| ID CWE: 628, 685, 686, 687, 690, 910 |