PVS-Studio wollte, konnte aber keine Fehler in robots.txt finden

Bild 1

Neulich hat Google die Quellen des Pars robots.txt enthüllt. Warum nicht mit PVS-Studio einen Lauf für das bereits weit und breit geprüfte Projekt machen und möglicherweise einen Fehler finden? So gesagt so getan. Aber ich wünschte, wir könnten etwas Sinnvolles finden. Dann ist es nur ein Grund, Google-Entwicklern die volle Punktzahl zu geben.

robots.txt - ist eine Indexdatei, die Regeln für Suchroboter enthält. Es funktioniert für https-, http- und FTP-Protokolle. Google hat den Parser der robots.txt-Datei für alle verfügbar gemacht. Lesen Sie hier mehr über diese Neuigkeiten: Google öffnet den Quellcode des Pars robots.txt

Ich denke, die meisten unserer Leser wissen, was PVS-Studio macht. Für den Fall, dass Sie zum ersten Mal in unserem Blog sind, gebe ich einen kurzen Hinweis. PVS-Studio ist ein statischer Code-Analysator, mit dem Sie eine Vielzahl von Fehlern, Schwachstellen und Fehlern in Projekten finden können, die in C, C ++, C # und Java geschrieben wurden. Mit anderen Worten, PVS-Studio ist eine SAST- Lösung und kann sowohl auf Benutzercomputern, Build-Servern als auch in der Cloud verwendet werden . Das PVS-Studio-Team schreibt auch gerne Artikel über Schecks verschiedener Projekte. Kommen wir also zum Punkt und versuchen, Fehler im Quellcode des Parsers von Google zu finden.

Leider wurden zur Freude aller anderen keine Fehler gefunden. Nur ein paar kleinere Mängel, über die ich berichten werde. Nun, ich muss etwas über das Projekt schreiben :). Das Fehlen von Fehlern ist auf die geringe Menge des Projekts und die hohe Qualität des Codes selbst zurückzuführen. Dies bedeutet nicht, dass es keine versteckten Fehler gibt, aber die statische Analyse war zu diesem Zeitpunkt hilflos.

Dieser Artikel war also im Geiste eines anderen unserer Post " Der kürzeste Artikel über einen Nginx-Check ".

Ich habe einen Fall mit möglicher Optimierung gefunden:

V805 Leistungsminderung. Es ist ineffizient, eine leere Zeichenfolge mithilfe des Konstrukts 'strlen (str)> 0' zu identifizieren. Eine effizientere Möglichkeit besteht darin, Folgendes zu überprüfen: str [0]! = '\ 0'. robots.cc 354

bool RobotsTxtParser::GetKeyAndValueFrom(char **key, ....) { .... *key = line; .... if (strlen(*key) > 0) { .... return true; } return false; } 

Es ist ineffizient, die Funktion strlen aufzurufen , um herauszufinden, ob eine Zeichenfolge leer ist. Diese Prüfung kann viel einfacher sein: if (* key [0]! = '\ 0'). Auf diese Weise müssen Sie nicht die gesamte Zeichenfolge durchlaufen, wenn sie nicht leer ist.

Das V808 -Objekt 'path' vom Typ 'basic_string' wurde erstellt, aber nicht verwendet. robots.cc 123

 std::string GetPathParamsQuery(....) { std::string path; .... } 

Die Zeichenfolge wird deklariert, aber nicht weiter verwendet. In einigen Fällen können nicht verwendete Variablen auf einen Fehler hinweisen. In diesem Fall sieht es so aus, als ob diese Variable irgendwie verwendet wurde, aber nach dem Vornehmen von Änderungen wurde sie unnötig. Daher hilft der Analysator häufig dabei, den Code sauberer zu gestalten und Fehler zu vermeiden, indem einfach die Voraussetzungen für ihr Erscheinungsbild entfernt werden.

Im nächsten Fall empfiehlt der Analysator, eine Standardrückgabe hinzuzufügen, nachdem die gesamte Hauptleitung ausgeführt wurde. Vielleicht lohnt es sich, ganz am Ende eine Rückgabeerklärung hinzuzufügen, um zu verstehen, dass wirklich alles geklappt hat. Wenn ein solches Verhalten beabsichtigt war, muss jedoch nichts geändert werden. Wenn Sie diese Warnung nicht sehen möchten, können Sie sie in PVS-Studio unterdrücken und nie wieder sehen :).

V591 Die Funktion 'main' gibt keinen Wert zurück, der 'return 0' entspricht. Es ist möglich, dass dies ein unbeabsichtigtes Verhalten ist. robots_main.cc 99

 int main(int argc, char** argv) { .... if (filename == "-h" || filename == "-help" || filename == "--help") { ShowHelp(argc, argv); return 0; } if (argc != 4) { .... return 1; } if (....) { .... return 1; } .... if (....) { std::cout << "...." << std::endl; } } 

Ich fand auch, dass zwei Funktionen, die unterschiedliche Namen hatten, auf die gleiche Weise implementiert wurden. Vielleicht ist dies das Ergebnis der Tatsache, dass diese Funktionen früher unterschiedliche Logik hatten, aber zu einer kamen. Es kann sein, dass sich irgendwo ein Tippfehler eingeschlichen hat, daher sollten solche Warnungen sorgfältig geprüft werden.

V524 Es ist seltsam, dass der Hauptteil der Funktion 'MatchDisallow' dem Hauptteil der Funktion 'MatchAllow' vollständig entspricht. robots.cc 645

 int MatchAllow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; } int MatchDisallow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; } 

Es ist der einzige Ort, dem ich misstrauisch bin. Es sollte von den Autoren des Projekts überprüft werden.

So hat die Überprüfung des Pars robots.txt von Google ergeben, dass dieses mehrfach überprüfte und weit verbreitete Projekt von hoher Qualität ist. Selbst einige gefundene Fehler können den Eindruck cooler Google-Codierer, die dieses Projekt schreiben, nicht beeinträchtigen :).

Wir empfehlen Ihnen auch , PVS-Studio für das Projekt herunterzuladen und zu testen, an dem Sie interessiert sind.

Source: https://habr.com/ru/post/de459658/


All Articles