PVS-Studio 7.04

Bild 4

Der Sommer ist nicht nur eine Ferienzeit, sondern auch eine Zeit fruchtbarer Arbeit. Sonnige Tage sind so inspirierend, dass es genug Energie gibt, sowohl für späte Spaziergänge als auch für große Code-Commits. Die zweite Veröffentlichung von PVS-Studio 7.04 im Sommer erwies sich als ziemlich umfangreich. Wir empfehlen Ihnen daher diese Pressemitteilung, in der wir Ihnen alles erzählen.

PVS-Studio ist ein Tool zum Erkennen von Fehlern und potenziellen Schwachstellen im Quellcode von Programmen, die in C, C ++, C #, Java geschrieben sind. Es funktioniert in Windows-, Linux- und MacOS-Umgebungen.

Eine umfangreiche Sammlung von Fehlern, die bei der Überprüfung verschiedener Open Source-Projekte im Code gefunden wurden, zeigt deutlich die Fähigkeiten des Analysators.

Hier finden Sie eine Übersicht über die neuen Funktionen der PVS-Studio 7.04-Version.

Suchen Sie nach Dateien mit Copyleft-Lizenzen


Bei der Arbeit an einer Aufgabe nehmen Entwickler Code von so vielen verschiedenen Stellen. Eine beliebte Quelle für Copy-Paste-Code ist die Stackoverflow-Website und ähnliche. Es gibt Fälle, in denen ein Entwickler den Code aus einem Open Source-Projekt entnimmt und die Lizenzanforderungen nicht überprüft. Daher kann ein Closed-Source-Projekt versehentlich einige Dateien aus einem Open-Source-Projekt mit einer Copyleft-Lizenz erhalten, wodurch der gesamte Projektcode Open Source werden muss. In Unternehmen mit einer großen Anzahl von Mitarbeitern ist es schwierig, den Überblick zu behalten, während solche Maßnahmen nachteilige Risiken und Probleme verursachen können. PVS-Studio verfügt nun über eine Diagnose, mit deren Hilfe solche Dateien gefunden werden können. Es bezieht sich auf alle unterstützten Sprachen (C, C ++, C #, Java).

Diagnosenummern für verschiedene Sprachen:


Schauen wir uns diese Diagnosen genauer an und finden heraus, wofür sie gemacht sind. Ein Beispiel für einen Kommentar, an den der Analysator eine Warnung ausgibt:

/* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ 

Für geschlossene Projekte


Wenn Sie in einem geschlossenen Projekt eine Datei mit einer solchen Lizenz (in diesem Fall GPL3) hinzufügen, müssen Sie den Restcode aufgrund der Besonderheiten dieser Lizenz öffnen.

Eine solche Art von Lizenzen wird als " viral " bezeichnet, da sie sich auf den Rest der Projektdateien erstrecken können. Das Problem ist, dass die Verwendung mindestens einer Datei mit einer solchen Lizenz in einem geschlossenen Projekt automatisch den gesamten Quellcode öffnet und verpflichtet, ihn zusammen mit Binärdateien zu verteilen.

Die Diagnose sucht nach folgenden "Virus" -Lizenzen:

  • AGPL-3.0
  • GPL-2.0
  • GPL-3.0
  • LGPL-3.0

Hier sind die Optionen, die Sie ausführen können, wenn Sie die Verwendung von Dateien mit einer Copyleft-Lizenz in einem geschlossenen Projekt feststellen:

  1. Verwenden Sie keinen solchen Code (Bibliothek) in Ihrem Projekt.
  2. Ersetzen Sie die verwendete Bibliothek;
  3. Machen Sie das Projekt Open Source.

Für offene Projekte


Wir verstehen, dass diese Diagnose für Open Source-Projekte ungeeignet ist. Das PVS-Studio-Team trägt zur Entwicklung von Open Source-Projekten bei, hilft bei der Behebung von Fehlern und bietet kostenlose Lizenzoptionen . Bei unserem Produkt handelt es sich jedoch um eine B2B-Lösung. Daher ist diese Diagnose standardmäßig aktiviert.

Wenn Ihr Code unter einer der oben genannten Copyleft-Lizenzen verteilt ist, können Sie diese Diagnose auf folgende Weise deaktivieren (für C \ C ++ ist es V1042):

  • Wenn Sie das PVS-Studio-Plugin für Visual Studio verwenden, können Sie diese Diagnose deaktivieren, indem Sie zu Optionen> PVS-Studio> Erkennbare Fehler> 1.Allgemeine Analyse> V1042 gehen. Danach wird es nicht mehr im Analysatorbericht angezeigt. Der Nachteil dieser Methode ist, dass der Fehler beim Speichern weiterhin in das Protokoll des Analysators geschrieben wird (oder wenn die Analyse über die Befehlszeile ausgeführt wurde). Wenn Sie ein solches Protokoll auf einem anderen Computer öffnen oder die Analyseergebnisse in ein anderes Format konvertieren, werden die auf diese Weise deaktivierten Nachrichten möglicherweise erneut angezeigt.
  • Wenn Sie das Plugin nicht verwenden und die Regel für das gesamte Team blockieren oder aus dem Bericht des Analysators entfernen möchten, können Sie der Konfigurationsdatei (.pvsconfig) oder den Kommentar "// - V :: 1042" hinzufügen zu einer der globalen Header-Dateien. Für Entwickler, die Visual C ++ verwenden, wäre es eine gute Option, diesen Kommentar in die "stdafx.h" einzufügen. Datei. Dieser Kommentar weist den Analysator an, die V1042-Diagnose zu deaktivieren. Die Dokumentation enthält detailliertere Informationen zum Deaktivieren der Diagnose mithilfe der Kommentare.
  • Wenn Sie das Dienstprogramm Plog Converter zum Konvertieren von Berichten verwenden, können Sie die Diagnose mit der Taste "-d" deaktivieren.

Für C # ist V3144 eine entsprechende Nummer einer Diagnose, V6071 - für Java.

Erweiterung der Liste der gefährlichen Lizenzen


Falls Sie andere Arten von "Viren" -Lizenzen kennen, die PVS-Studio derzeit nicht erkennt, können Sie uns dies gerne über unser Feedback-Formular mitteilen. Wir werden sie in der nächsten Version hinzufügen.

Neue Diagnose


C, C ++ (Allgemein)


  • V1040 . Möglicher Tippfehler in der Schreibweise eines vordefinierten Makronamens.
  • V1041 . Das Klassenmitglied wird mit einer baumelnden Referenz initialisiert.
  • V1042 . Diese Datei ist mit einer Copyleft-Lizenz gekennzeichnet, für die Sie den abgeleiteten Quellcode öffnen müssen.
  • V1043 . Eine globale Objektvariable wird im Header deklariert. In allen Übersetzungseinheiten, die diese Header-Datei enthalten, werden mehrere Kopien davon erstellt.

Besonderes Augenmerk möchte ich auf die Diagnose mit der Nummer V1040 legen . Wir haben bereits in der Beta-Phase einen interessanten Fehler in der Bibliothek des bekannten CMake-Projekts gefunden:

V1040 Möglicher Tippfehler bei der Schreibweise eines vordefinierten Makronamens . Das Makro '__MINGW32_' ähnelt '__MINGW32__'. winapi.h 4112

 /* from winternl.h */ #if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif 

Der Name __MINGW32_ enthält einen Tippfehler. Am Ende fehlt ein Unterstreichungszeichen. Wenn Sie den Code mit diesem Namen durchsuchen, sehen Sie, dass im Projekt die Version mit zwei Unterstreichungszeichen auf beiden Seiten verwendet wird:

Bild 8

Sie können alle gefundenen Fehler im CMake-Projekt im Artikel " CMake: Der Fall, in dem die Qualität des Projekts unverzeihlich ist " überprüfen.

C, C ++ (MISRA)


  • V2551 . Misra. Die Variable sollte in einem Bereich deklariert werden, der ihre Sichtbarkeit minimiert.
  • V2552 . Misra. Ausdrücke mit dem zugrunde liegenden Typ enum sollten Werte haben, die den Enumeratoren der Enumeration entsprechen.
  • V2553 . Misra. Der unäre Minusoperator sollte nicht auf einen Ausdruck vom Typ ohne Vorzeichen angewendet werden.
  • V2554 . Misra. Ausdrücke, die Inkrement (++) oder Dekrement (-) enthalten, sollten keine anderen Nebenwirkungen haben.
  • V2555 . Misra. Falscher Verschiebungsausdruck.
  • V2556 . Misra. Verwendung eines Zeigers auf FILE, wenn der zugehörige Stream bereits geschlossen wurde.
  • V2557 . Misra. Der Operand des Operators sizeof () sollte keine anderen Nebenwirkungen haben.

C #


  • V3140 Eigenschaftszugriffsberechtigte verwenden unterschiedliche Hintergrundfelder.
  • V3141 . Der Ausdruck unter 'throw' ist eine potenzielle Null, die zu NullReferenceException führen kann.
  • V3142 . Nicht erreichbarer Code erkannt. Möglicherweise liegt ein Fehler vor.
  • V3143 . Der Parameter 'value' wird in einem Eigenschaftssetter neu geschrieben und danach nicht mehr verwendet.
  • V3144 . Diese Datei ist mit einer Copyleft-Lizenz gekennzeichnet, für die Sie den abgeleiteten Quellcode öffnen müssen.
  • V3145. Unsichere Dereferenzierung eines WeakReference-Ziels. Das Objekt könnte Müll gesammelt worden sein, bevor auf die Eigenschaft 'Target' zugegriffen wurde.

Für den C # -Analysator haben wir die Auswertung von Lese- / Schreibwerten von Eigenschafts-Gettern und -Setzern sowie von asynchronen Methoden hinzugefügt.

Wir arbeiten derzeit an der Verbesserung der Überwachung der Werte und Eigenschaften von Objekten von Objekten, wenn diese an Methoden übergeben werden, sowie an der Überwachung des Inhalts von Turples. Diese Verbesserungen werden in der nächsten Analysatorversion verfügbar sein.

Java


  • V6068 Verdächtige Verwendung der BigDecimal-Klasse.
  • V6069 Vorzeichenlose Rechtsverschiebung des negativen Wertes 'Byte' / 'Kurz'.
  • V6070 Unsichere Synchronisation für ein Objekt.
  • V6071 Diese Datei ist mit einer Copyleft-Lizenz gekennzeichnet, für die Sie den abgeleiteten Quellcode öffnen müssen.

SonarQube 7.9 LTS


Lang erwartete Veröffentlichung


Seit der letzten Veröffentlichung der LTS-Version von SonarQube 6.7 sind fast zwei Jahre vergangen. Die neue Version wurde ab SQ 7.x mit Spannung erwartet, und als LTS veröffentlicht wurde, begannen die Benutzer aktiv darauf umzusteigen, was verschiedene Probleme verursachte. Bald kam SQ 7.9.1 LTS mit kleineren Korrekturen heraus und Plugin-Entwickler von Drittanbietern machten auch Patches.

Glücklicherweise hatte das PVS-Studio-Plugin nur ein Problem im Zusammenhang mit der Umstellung auf Java 11, das schnell behoben wurde und unsere Kunden sofort auf eine funktionsfähige Version umstellten.

Wir sind auch weiterhin mit alten SonarQube-Versionen kompatibel. Die Liste der unterstützten Versionen sieht nun wie folgt aus: SonarQube 6.7 LTS und höher

Weitere unterstützte Sprach-Plugins


Das PVS-Studio-Plugin konvertiert nur Analyseergebnisse in das Format der SonarQube-Datenbank. Mit anderen Worten, es werden nur die Ergebnisse der PVS-Studuio-Analyse in SQ heruntergeladen. Damit das Dienstprogramm SonarScanner vollständig funktioniert, müssen Plugins für Programmiersprachen installiert sein. Wir haben nicht begonnen, das zu entwickeln, was bereits vorhanden ist, also fügen wir nur die Unterstützung bereits vorhandener beliebter Plugins hinzu. In dieser Version haben wir die Kompatibilität mit Sonar C Community- und SonarCFamily-Sprach-Plugins hinzugefügt.

Die gesamte Liste der unterstützten Sprach-Plugins sieht folgendermaßen aus:


Um die Ergebnisse der PVS-Studio-Analyse hochzuladen, reicht es aus, mindestens ein Plugin aus dieser Liste zu installieren. Die meisten Benutzer installieren nur Sonar C ++ Community, SonarC # oder SonarJava. Die restlichen Plugins werden möglicherweise für spezifischere Projekte benötigt.

Berücksichtigen Sie bei der Auswahl von Plugins, dass Community-Plugins nicht mit SonarCFamily kompatibel sind. Wenn Sie jedoch nur die SonarQube Community Edition verwenden, gibt es kein solches Problem.

Neue Einstellungsseite


Bisher konnte der Analysator nur über die Konfigurationsdatei sonar-project.properties konfiguriert werden. Es gibt keine Beschwerden über diese Methode. Es ist sehr praktisch und wird zu 99% verwendet. Wir haben jedoch auf der Serverseite von SonarQube eine zusätzliche Einstellungsseite unter Administration> Konfiguration> PVS-Studio erstellt , da diese für einige Szenarien bevorzugt verwendet werden kann.

Die Einstellungsseite sieht folgendermaßen aus:

Bild 10

Wenn Sie Konfigurationen auf zwei Arten festlegen , haben die in der Datei sonar-project.properties angegebenen die höchste Priorität.

Plugin für IntelliJ IDEA


Die Versionen der neuen Versionen IntelliJ IDEA und PVS-Studio unterscheiden sich in den Daten. Vor kurzem hatten wir eine Situation, als IntelliJ IDEA 192. * veröffentlicht wurde, aber das PVS-Studio-Plugin nicht darin installiert werden konnte. In dieser Version haben wir Unterstützung für die neuesten IntelliJ IDEA-Versionen sowie Verbesserungen hinzugefügt, um ähnliche Probleme in Zukunft zu vermeiden.

Plugins für Jenkins


PVS-Studio Plugin

Das PVS-Studio-Plugin dient zum Veröffentlichen von Berichten über die Ergebnisse des PVS-Studio-Analysators im kontinuierlichen Integrationssystem von Jenkins im HTML-Format. Bisher war dieses Plugin nur für Windows-Benutzer verfügbar, da es den Berichtskonverter automatisch aufrief und dies nur für Windows tat. In PVS-Studio 7.04 unterstützt das Plugin nur HTML-Berichte, die in einem einzigen Schritt generiert werden müssen. Durch diese Maßnahme wurde das Plugin jedoch plattformübergreifend.

Warnungen NG Plugin

Für Jenkins gibt es ein nützliches Plugin Warnungen Next Generation Plugin zum Anzeigen von Analyseergebnissen aus verschiedenen Tools. Wir haben kürzlich PVS-Studio-Unterstützung hinzugefügt. Die Möglichkeit, die PVS-Studio-Analyseergebnisse mit diesem Plugin zu laden, wurde in Version 6.0.0 verfügbar. Die Veröffentlichung fiel versehentlich mit der Version PVS-Studio 7.04 zusammen:

Bild 1

Andere Verbesserungen


PVS-Studio_Cmd

PVS-Studio_Cmd.exe verfügt jetzt über einen speziellen Betriebsmodus - Anmeldeinformationen. In diesem Modus können Sie eine Einstellungsdatei erstellen und Lizenzinformationen eingeben, ohne eine GUI-Oberfläche zu verwenden (z. B. das Visual Studio-Plugin oder das Dienstprogramm zur Überwachung der C- und C ++ - Compiler-Benutzeroberfläche). Dieser Modus ist besonders relevant, wenn er auf einem Build-Server (wo möglicherweise keine GUI-Dienstprogramme vorhanden sind) in Containern bei der Integration in Cloud-Lösungen verwendet wird.

Analyse unwirklicher Motorprojekte

Wir haben die Option AutoloadUnrealEngineLog im PVS-Studio-Plugin für Visual Studio hinzugefügt, mit der Sie den Analysebericht nach der Analyse automatisch in das PVS-Studio-Ausgabefenster hochladen können. Ohne diese Option muss das Protokoll manuell über das Plugin-Menü hochgeladen werden.

Im Dokumentationsabschnitt " Analyse von Unreal Engine-Projekten " werden auch Änderungen an Standard-Build-Skripten beschrieben, mit denen Sie in einer Aktion erstellen und analysieren können. Ohne Skriptänderungen (beim Hinzufügen des Flags -StaticAnalyzer = PVSStudio zum Starten von Argumenten) wird das Projekt nur analysiert, nicht erstellt.

CLMonitor

Für das Dienstprogramm CLMonitor haben wir die Möglichkeit hinzugefügt, Compilerläufe für einen bestimmten Prozess zu überwachen. Auf diese Weise können Sie Compiler-Läufe überwachen, die sich nur auf ein bestimmtes Projekt beziehen, auch während paralleler Builds mehrerer Projekte. Um in diesem Modus zu arbeiten, werden die Flags --parentProcessID% PID% (CLMonitor überwacht untergeordnete Prozesse in Bezug auf den angegebenen) und --attach (CLMonitor überwacht untergeordnete Prozesse in Bezug auf eine aktuelle Konsole).

pvs-studio-analyzer

Das Flag --ignore-ccache wird im Dienstprogramm pvs-studio-analyzer hinzugefügt, mit dem Projekte unter Linux und macOS überprüft werden können:

 pvs-studio-analyzer analyze ... --ignore-ccache ... 

Wenn das Dienstprogramm ccache in einer Projekterstellung verwendet wird, arbeitet PVS-Studio im inkrementellen Analysemodus. Wählen Sie dieses Flag aus, um das gesamte Projekt zu überprüfen, ohne den Cache des Dienstprogramms ccache zurückzusetzen .

Zusätzliche Links


Abonnieren Sie, um über unsere neuen Veröffentlichungen informiert zu werden:

  1. Twitter: @Code_Analysis
  2. Youtube: PVS-Studio
  3. Facebook: @StaticCodeAnalyzer
  4. Instagram: @pvsstudio
  5. Telegramm: PVS-Studio
  6. RSS: viva64-blog-de

PVS-Studio:

  1. PVS-Studio Produktseite
  2. Herunterladen
  3. Dokumentation
  4. Kunden

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


All Articles