gpt4 book ai didi

c - 如何去掉静态分析报告中的 "tainted parameter"?

转载 作者:行者123 更新时间:2023-11-30 15:00:40 27 4
gpt4 key购买 nike

我正在使用 Parasoft 来分析我的代码。我去这个违规:

Tainted parameter of entry point method ("inFileName") has been printed on the console

这是错误所在的代码:

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 满意?

最佳答案

您可能会收到此警告,因为您没有正确清理程序参数。例如,如果您得到一个非终止字符串,printf 中的 %s 说明符将使您的程序继续读取(和打印)内存,从而导致未定义的行为和安全问题。

关于什么是“受污染的参数”:

In software security analysis, a value is said to be tainted if it comes from an untrusted source (outside of the program’s control) and has not been sanitized to ensure that it conforms to any constraints on its value that consumers of the value require — for example, that all strings are null-terminated.

(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;
}

关于c - 如何去掉静态分析报告中的 "tainted parameter"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41952266/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com