2017-01-31 2 views
0

Ich verwende Parasoft, um meinen Code zu analysieren. Ich gehe diese Verletzung:Wie "verdorbene Parameter" im statischen Analysebericht loswerden?

besudeltem Parameter der Eintrittspunkt-Methode ("infilename") auf der Konsole gedruckt wurde

dies der Code ist, wo der Fehler ist:

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

wo inFileNAme ist eigentlich argv[0].

Wie kann ich den Verstoß beheben oder zumindest Parasoft zufriedenstellen?

+0

Können Sie nicht Gebrauch machen von 'puts()' stattdessen? Einfach raten. –

+0

Können Sie bitte versuchen, ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und uns zu zeigen? –

+2

Gibt es irgendein geschlossenes ');' am Ende der 'printf' Funktion? –

Antwort

1

Sie erhalten diese Warnung wahrscheinlich, weil Sie Ihren Programmparameter nicht richtig bereinigen. Wenn Sie beispielsweise eine nicht abgeschlossene Zeichenfolge erhalten würden, würde der %s-Spezifizierer in Ihrem printf dafür sorgen, dass Ihr Programm weiterhin Speicher liest (und druckt), was zu undefiniertem Verhalten und Sicherheitsbedenken führt.

, was ein „Tainted Parameter“ ist:

In der Software-Sicherheitsanalyse wird ein Wert, sagt verdorben werden, wenn es von einer nicht vertrauenswürdigen Quelle stammt (außerhalb der Kontrolle des Programms) und wurde, um sicherzustellen, nicht desinfiziert, dass es zu irgendwelchen Einschränkungen auf seinem Wert entspricht , dass die Verbraucher des Wertes erfordern - zum Beispiel, dass alle Strings nullterminierte sind.

(source) (Hervorhebung von mir)

Um sicherzustellen, dass Ihr Eingabewert richtig ist, können Sie eine Funktion wie strdup verwenden können ....:

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

Danke! es funktionierte – eyalm