当我将argv作为参数传递给test_run()
时,我将用下面的代码获取Coverity warning Untrusted value作为参数。它说污染变量传递到污染的水槽,但我不确定如何使argv不污染!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int
main (int argc, char **argv)
{
/* some code */
// char **nstr;
// nstr = malloc(sizeof(char*));
// if(!nstr) {
// return 1;
// }
// int i=0;
// for(i=0;i<argc;i++){
// nstr[i] = strdup(argv[i]);
// }
test_run(argc-1, argv, testf);
}
int test_run(int argc, char **argv, testf_handle testf)
{
if (!argv) {
return 1;
}
/* some code */
testf->prog_name = argv[0];
parse_context(&pc, argc, argv);
/*- - other code - -*/
}
我尝试使用注释代码并传递nstr insted of argv,但在第行时仍然收到相同的警告:
nstr[i] = strdup(argv[i]);
我不确定在把它作为参数传递之前我应该做什么理智的检查。
我在linux机器上使用gcc编译器。
testf是具有多个成员变量的结构测试框架的一个实例。
谢谢。
最佳答案
您可以通过检查来确保argv
不受污染,以确保它符合某些特定规范。例如,检查argv下字符串的长度以确保它小于某个上限,确保它不包含坏字符序列,等等。
Coverity将检测您的清理尝试,一旦您真正清理输入,缺陷将得到解决。
关于c - 将受污染的变量传递到受污染的水槽,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46027339/