0

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

4

1 回答 1

1

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

至于什么是“污染参数”:

在软件安全分析中,如果一个值来自不受信任的来源(在程序控制之外)并且 没有经过清理以确保它符合该值的消费者所要求的对其值的任何约束,则称该值被污染——例如例如,所有字符串都以空字符结尾。

(来源)(强调我的)

为了确保您的输入值是正确的,您可以使用类似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;
}
于 2017-01-31T08:18:59.873 回答