Аргумент стандартной функции не соответствует требованиям для использования в функции
Этот дефект возникает, когда аргументы к определенным стандартным функциям не соответствуют требованиям к их использованию в функциях.
Например, аргументы в эти функции могут быть недопустимыми следующими способами.
Тип функции | Ситуация | Риск | Зафиксировать |
---|---|---|---|
Функции манипуляции строками, такие как strlen и strcpy | Аргументы указателя не указывают на NULL -terminated string. | Поведение функции не определено. | Передайте NULL -terminated string to string mandipulation functions. |
Функции обработки файлов в stdio.h такие как fputc и fread | The 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 Desktop.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: STD_FUNC_ARG_MISMATCH |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE: 628, 685, 686, 687, 690, 910 |