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

Die neue Version des statischen Code-Analysetools cppcheck 2.6 ist erschienen und ermöglicht die Identifizierung verschiedener Fehlerklassen in Code, der in C und C++ geschrieben ist, einschließlich der Verwendung von nicht standardkonformen Syntaxen, die für eingebettete Systeme typisch sind. Es wird eine Sammlung von Plugins bereitgestellt, die die Integration von cppcheck mit verschiedenen Entwicklungs-, Continuous-Integration- und Testsystemen sicherstellt, sowie Funktionen wie die Überprüfung der Übereinstimmung des Codes mit dem Codestyle bereitstellt. Zur Analyse des Codes kann sowohl der interne Parser als auch der externe Parser von Clang verwendet werden. Außerdem enthält das Paket das Skript donate-cpu.py, das lokale Ressourcen für die Zusammenarbeit bei der Codeüberprüfung von Debian-Paketen bereitstellt. Der Quellcode des Projekts wird unter der GPLv3-Lizenz verbreitet.

Die Entwicklung von cppcheck konzentriert sich auf die Identifikation von Problemen im Zusammenhang mit undefiniertem Verhalten und der Nutzung von constructions, die in Bezug auf Sicherheit gefährlich sind. Ziel ist es auch, falsche Positives zu minimieren. Zu den identifizierten Problemen gehören: Zeiger auf nicht existierende Objekte, Division durch Null, Überläufe bei Ganzzahlen, fehlerhafte Bitverschiebungsoperationen, fehlerhafte Umwandlungen, Probleme beim Umgang mit Speicher, unsachgemäße Nutzung von STL, Dereferenzierung von Nullzeigern, Anwendung von Überprüfungen nach tatsächlich erfolgtem Zugriff auf den Puffer, Pufferüberläufe und die Verwendung von nicht initialisierten Variablen.

In der neuen Version:

  • Folgende Überprüfungen wurden in den Kern des Analysetools aufgenommen:
    • fehlender return-Operator im Körper der Funktion;
    • Schreiben in überlappende Daten, Feststellung von undefiniertem Verhalten;
    • der zu vergleichende Wert liegt außerhalb des Darstellungsbereichs des Datentyps;
    • die Kopieroptimierung wird für return std::move(local) nicht angewendet;
    • eine Datei kann nicht gleichzeitig in verschiedenen Streams (stream) zum Lesen und Schreiben geöffnet werden;
  • für Unix-Systeme wurde die Unterstützung für die Ausgabe von Diagnosemeldungen in verschiedenen Farben hinzugefügt;
  • eine symbolische Analyse für ValueFlow wurde hinzugefügt. Es wird eine einfache Delta-Methode verwendet, um Unterschiede zwischen zwei unbekannten Variablen zu berechnen;
  • die Regeln, die für die Liste der Token «define» verwendet werden, können ebenfalls für #include gelten;
  • Der Bibliothekstag kann jetzt das Tag enthalten, und entsprechend können Funktionen wie std::size, std::empty, std::begin, std::end usw. yield oder action für Container angeben;
  • Der Bibliothekstag kann jetzt das Tag für intelligente Zeiger enthalten, die exklusives Eigentum (unique ownership) haben. Es wird jetzt eine Warnung über "hängende" Verweise auf solche intelligenten Zeiger ausgegeben;
  • Probleme mit der Verarbeitung des Parameters —cppcheck-build-dir wurden behoben;
  • htmlreport kann jetzt Informationen über den Autor (mithilfe von git blame) ausgeben;
  • Die Warnungen über Variablen, die keine Konstanten sind, aber es sein könnten, wurden erweitert;
  • Die ansammelten Fehler und Mängel des Analysators wurden behoben.

Zusätzlich wurden die Überprüfungen aus Misra C 2012 vollständig implementiert, einschließlich der Änderungen 1 und 2, mit Ausnahme der Regeln 1.1, 1.2 und 17.3. Die Überprüfungen 1.1 und 1.2 sollten vom Compiler ausgeführt werden. Die Überprüfung 17.3 kann vom Compiler, z.B. GCC, durchgeführt werden.

Quelle: opennet.ru

60GB SSD 8Gb DDR4