2017-01-31 5 views
0

Я использую Parasoft для анализа моего кода. Я иду нарушение:Как избавиться от «tainted parameter» в отчете статического анализа?

Tainted параметр метода точки входа ("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 удовлетворенным?

+0

Не можете вы использовать из 'puts()' вместо этого? Просто гадать. –

+0

Не могли бы вы попытаться создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и показать нам? –

+2

Есть ли закрытый ');' в конце 'printf' функция? –

ответ

1

Возможно, вы получаете это предупреждение, потому что вы не дезактивируете свой программный параметр должным образом. Например, если вы получите строку без конца, спецификатор %s в вашем printf заставит вашу программу продолжать чтение (и печать) памяти, вызывая неопределенное поведение и проблемы безопасности.

Как к тому, что «Tainted параметр» является:

В анализе безопасности программного обеспечения, значение называется испорчена, если она исходит от ненадежного источника (вне контроля программы) и не продезинфицировать, чтобы убедиться, что она соответствует каким-либо ограничениям по своей стоимости , что потребители значения требуют - например, что все строки нуля.

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

Спасибо! это сработало – eyalm

Смежные вопросы