当我将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/

10-11 00:17