Аргумент к стандартной функции не удовлетворяет требования для использования в функции
Этот дефект происходит, когда аргументы к функциям определенного стандарта не удовлетворяют требования для своего использования в функциях.
Например, аргументы к этим функциям могут быть недопустимыми следующими способами.
Функциональный тип | Ситуация | Риск | Фиксация |
---|---|---|---|
Обработка строк функционирует, такие как 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 |
| Некоторые реализации не обрабатывают эти случаи ребра. | Протестируйте строку для "" перед использованием его как аргумент функции. |
Фиксация зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Можно реализовать закрепление на любом событии в последовательности. Если детали результата не показывают историю события, можно проследить использование, щелкните правой кнопкой по опциям по исходному коду и смотрите предыдущие связанные события. См. также Интерпретируют Результаты Bug Finder в Пользовательском интерфейсе Рабочего стола Polyspace.
Смотрите примеры мер ниже.
Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода |
Синтаксис командной строки: STD_FUNC_ARG_MISMATCH |
Удар: Средняя |
ID CWE: 628, 685, 686, 687, 690, 910 |