如何摆脱"污染参数"在静态分析报告?

时间:2017-01-31 07:49:24

标签: c static-analysis parasoft

我正在使用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满意?

1 个答案:

答案 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;
}