我正在使用Parasoft来分析我的代码。我违反了这个规定:
入口点方法的受污染参数(" inFileName")已在控制台上打印
这是错误的代码:
static void printUsage(char *inFileName)
{
printf("Usage: %s %s\n", inFileName, "[-h|-help|-usage]\n");
}
int main(int argc, char **argv)
{
printUsage(argv[0]);
return 0;
}
inFileNAme
实际上是argv[0]
。
如何修复违规行为或至少让Parasoft满意?
答案 0 :(得分:1)
您可能会收到此警告,因为您没有正确清理程序参数。例如,如果您将获得一个非终止字符串,%s
中的printf
说明符将使您的程序继续读取(和打印)内存,从而导致未定义的行为和安全问题。
关于什么是"污染参数"是:
在软件安全性分析中,如果一个值被认为是污染的话 来自不受信任的来源(在程序控制之外)和 尚未清理以确保其符合任何约束条件 它的价值价值的消费者需要 - 例如,所有 字符串以空值终止。
(source)(强调我的)
为了确保您的输入值正确,您可以使用strdup
....之类的函数:
static void printUsage(char *inFileName)
{
char *inFile = strdup(inFileName);
if (inFile == 0) {
printf("Error with program Argument.");
}else{
printf("Usage: %s %s\n", inFile, "[-h|-help|-usage]\n");
free(inFile);}
}
int main(int argc, char **argv)
{
printUsage(argv[0]);
return 0;
}