Veröffentlichung von cppcheck 2.6, einem statischen Code-Analysator für C++- und C-Sprachen

Es wurde eine neue Version des statischen Code-Analysators cppcheck 2.6 veröffentlicht, mit der Sie verschiedene Fehlerklassen im Code in den Sprachen C und C++ identifizieren können, auch bei Verwendung einer nicht standardmäßigen Syntax, die für eingebettete Systeme typisch ist. Es wird eine Sammlung von Plugins bereitgestellt, über die cppcheck in verschiedene Entwicklungs-, kontinuierliche Integrations- und Testsysteme integriert wird und außerdem Funktionen wie die Überprüfung der Code-Konformität mit dem Code-Stil bereitstellt. Zum Parsen von Code können Sie entweder Ihren eigenen Parser oder einen externen Parser von Clang verwenden. Es enthält auch das Skript donate-cpu.py, um lokale Ressourcen für die gemeinsame Codeüberprüfung von Debian-Paketen bereitzustellen. Der Quellcode des Projekts wird unter der GPLv3-Lizenz vertrieben.

Die Entwicklung von cppcheck konzentriert sich auf die Identifizierung von Problemen im Zusammenhang mit undefiniertem Verhalten und der Verwendung sicherheitstechnisch gefährlicher Designs. Ziel ist es auch, Fehlalarme zu minimieren. Zu den identifizierten Problemen gehören: Zeiger auf nicht vorhandene Objekte, Divisionen durch Null, Ganzzahlüberläufe, falsche Bitverschiebungsoperationen, falsche Konvertierungen, Probleme bei der Arbeit mit dem Speicher, falsche Verwendung von STL, Nullzeiger-Dereferenzierungen, die Verwendung von Prüfungen nach dem tatsächlichen Zugriff zum Puffer, Pufferüberläufe, Verwendung nicht initialisierter Variablen.

In der neuen Version:

  • Die folgenden Prüfungen wurden dem Analysekern hinzugefügt:
    • Fehlen eines Rückgabeoperators im Funktionskörper;
    • zeichnet überlappende Daten auf, ermittelt undefiniertes Verhalten;
    • Der verglichene Wert liegt außerhalb der Wertdarstellung des Typs.
    • Die Kopieroptimierung gilt nicht für return std::move(local);
    • die Datei kann nicht gleichzeitig zum Lesen und Schreiben in verschiedenen Streams (Stream) geöffnet werden;
  • für Unix-Plattformen Unterstützung für die Anzeige von Diagnosemeldungen in verschiedenen Farben hinzugefügt;
  • Symbolische Analyse für ValueFlow hinzugefügt. Verwendet einfaches Delta zur Berechnung der Differenz zwischen zwei unbekannten Variablen;
  • die Regeln, die für die Liste der Token „define“ verwendet werden, können auch mit #include übereinstimmen;
  • Bibliotheks-Tag kann jetzt ein Tag enthalten und dementsprechend die freien Funktionen, die Container wie std::size, std::empty, std::begin, std::end usw. akzeptieren können. kann Ertrag oder Aktion für Konnektoren angeben;
  • Bibliotheks-Tag kann jetzt ein Tag enthalten für intelligente Zeiger mit eindeutigem Besitz. Es wird jetzt eine Warnung vor leeren Verweisen auf diese Art von Smart Pointern ausgegeben.
  • Probleme bei der Verarbeitung des Parameters „cppcheck-build-dir“ behoben;
  • htmlreport kann jetzt Informationen über den Autor anzeigen (mithilfe von Git Blame);
  • erweiterte Warnungen zu Variablen, die nicht konstant sind, es aber sein könnten;
  • Die angehäuften Fehler und Mängel des Analysators wurden behoben.

Darüber hinaus wurden die Kontrollen aus Misra C 2012, einschließlich Änderung 1 und Änderung 2, mit Ausnahme der Regeln 1.1, 1.2 und 17.3 vollständig umgesetzt. Die Prüfungen 1.1 und 1.2 müssen vom Compiler durchgeführt werden. Die Verifizierung 17.3 kann von einem Compiler wie GCC durchgeführt werden.

Source: opennet.ru

Kommentar hinzufügen