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