ПроблемаНедопустимое использование стандартной стандартной программы создания строк в библиотеке происходит при вызове функции библиотеки строк с недопустимыми аргументами.
РискРиск зависит от типа недопустимых аргументов. Например, использование strcpy
функция с исходным аргументом, большим, чем конечный аргумент, может привести к переполнению буфера.
ЗафиксироватьИсправление зависит от стандартной функции библиотеки, участвующей в дефекте. В некоторых случаях можно ограничить аргументы функции перед вызовом функции. Для образца, если strcpy
функция:
char * strcpy(char * destination, const char* source);
пытается скопировать слишком много байтов в целевой аргумент по сравнению с доступным буфером, ограничивает исходный аргумент перед вызовом
strcpy
. В некоторых случаях можно использовать альтернативную функцию, чтобы избежать ошибки. Для образца вместо
strcpy
, можно использовать
strncpy
для управления количеством скопированных байтов. Смотрите также
Результаты интерпретации Bug Finder в интерфейсе пользователя Polyspace Desktop.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Пример - Недопустимое использование стандартной строки библиотеки Стандартной программы Ошибки #include <string.h>
#include <stdio.h>
char* Copy_String(void)
{
char *res;
char gbuffer[5],text[20]="ABCDEFGHIJKL";
res=strcpy(gbuffer,text);
/* Error: Size of text is less than gbuffer */
return(res);
}
Строка text
больше в размере, чем gbuffer
. Поэтому функция strcpy
невозможно скопировать text
в gbuffer
.
Коррекция - используйте допустимые аргументы
Одной из возможных коррекций является объявление строки назначения gbuffer
с размером, равным или большим, чем исходная строка text
.
#include <string.h>
#include <stdio.h>
char* Copy_String(void)
{
char *res;
/*Fix: gbuffer has equal or larger size than text */
char gbuffer[20],text[20]="ABCDEFGHIJKL";
res=strcpy(gbuffer,text);
return(res);
}