IssueInvalid use of standard library string
routine occurs when a string library function is called
with invalid arguments.
RiskThe risk depends on the type of invalid arguments. For instance, using the
strcpy function with a source argument larger than the
destination argument can result in buffer overflows.
FixThe fix depends on the standard library
function involved in the defect. In some cases, you can constrain the function arguments
before the function call. For instance, if the strcpy
function:
char * strcpy(char * destination, const char* source);
tries to copy too many bytes into the destination argument compared to the available
buffer, constrain the source argument before the call to
strcpy. In
some cases, you can use an alternative function to avoid the error. For instance, instead
of
strcpy, you can use
strncpy to control the number
of bytes copied. See also
Interpret Bug Finder Results in Polyspace Desktop User Interface.
See examples of fixes below.
If you do not want to fix the issue, add comments to your result or code to avoid
another review. See Address Polyspace Results Through Bug Fixes or Justifications.
Example - Invalid Use of Standard Library String Routine Error #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);
}
The string text is larger
in size than gbuffer. Therefore, the function strcpy cannot
copy text into gbuffer.
Correction — Use Valid Arguments
One possible correction is to declare the destination
string gbuffer with equal or larger size than the
source string 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);
}