PVS-Studio 7.04

Image 4

L'été n'est pas seulement une saison de vacances, mais aussi une période de travail fructueux. Les journées ensoleillées sont si inspirantes qu'il y a suffisamment d'énergie pour les promenades tardives et les grands engagements de code. La deuxième version estivale de PVS-Studio 7.04 s'est avérée assez importante, nous vous suggérons donc ce communiqué de presse, dans lequel nous vous parlerons de tout.

PVS-Studio est un outil conçu pour détecter les erreurs et les vulnérabilités potentielles dans le code source des programmes, écrit en C, C ++, C #, Java. Il fonctionne dans l'environnement Windows, Linux et macOS.

Une vaste collection d'erreurs trouvées dans le code lors des vérifications de divers projets open source démontre clairement les capacités de l'analyseur.

Voici un aperçu des nouvelles fonctionnalités de la version PVS-Studio 7.04.

Rechercher des fichiers avec des licences Copyleft


Lorsque vous travaillez sur une tâche, les développeurs prennent du code de tant d'endroits différents. Une source populaire de code Copier-Coller est le site Web Stackoverflow et similaires. Il y a des cas où un développeur prend le code d'un projet open source et ne vérifie pas les exigences de licence. Ainsi, un projet de source fermée peut accidentellement obtenir quelques fichiers d'un projet open source avec une licence Copyleft, ce qui oblige à rendre le code de projet entier open source. Dans les entreprises avec un grand nombre d'employés, il est difficile de garder une trace de cela, alors que de telles actions peuvent entraîner des risques et des problèmes négatifs. PVS-Studio dispose donc désormais d'un diagnostic qui vous aidera à retrouver de tels fichiers. Il concerne tous les langages pris en charge (C, C ++, C #, Java).

Numéros de diagnostic pour différentes langues:


Examinons de plus près ces diagnostics et trouvons à quoi ils sont destinés. Un exemple de commentaire que l'analyseur enverra un avertissement à:

/* 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/>. */ 

Pour les projets fermés


Si vous ajoutez un fichier avec une telle licence (dans ce cas, GPL3) dans un projet fermé, vous devrez ouvrir le reste du code en raison des spécificités de cette licence.

Un tel type de licences est appelé " viral " en raison de leur capacité à s'étendre au reste des fichiers du projet. Le problème est que l'utilisation d'au moins un fichier avec une telle licence dans un projet fermé ouvre automatiquement tout le code source et oblige à le distribuer avec les fichiers binaires.

Le diagnostic recherche les licences "virus" suivantes:

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

Voici les options de ce que vous pouvez faire si vous détectez l'utilisation de fichiers avec une licence copyleft dans un projet fermé:

  1. Abstenez-vous d'utiliser ce code (bibliothèque) dans votre projet;
  2. Remplacez la bibliothèque utilisée;
  3. Rendez le projet open source.

Pour les projets ouverts


Nous comprenons que ce diagnostic est inapproprié pour les projets open source. L'équipe PVS-Studio contribue au développement de projets open source, aide à corriger les erreurs et fournit des options de licence gratuites . Cependant, notre produit est une solution B2B et donc ce diagnostic est activé par défaut.

Si votre code est distribué sous l'une des licences copyleft ci-dessus, vous pouvez désactiver ce diagnostic des manières suivantes (pour C \ C ++ c'est V1042):

  • Si vous utilisez le plug-in PVS-Studio pour Visual Studio, vous pouvez désactiver ce diagnostic en allant dans Options> PVS-Studio> Erreurs détectables> 1.Analyse générale> V1042. Après cela, il ne sera pas affiché dans le rapport de l'analyseur. L'inconvénient de cette méthode est que l'erreur sera toujours écrite dans le journal de l'analyseur lors de sa sauvegarde (ou si l'analyse a été exécutée à partir de la ligne de commande). Par conséquent, lorsque vous ouvrez un tel journal sur une autre machine ou convertissez les résultats d'analyse dans un autre format, les messages qui ont été désactivés de cette manière peuvent réapparaître.
  • Si vous n'utilisez pas le plugin et que vous souhaitez bloquer la règle pour toute l'équipe ou la supprimer du rapport de l'analyseur, vous pouvez ajouter le commentaire "// - V :: 1042" au fichier de configuration (.pvsconfig) ou à l'un des fichiers d'en-tête globaux. Pour les développeurs qui utilisent Visual C ++, une bonne option serait d'ajouter ce commentaire dans le "stdafx.h". fichier. Ce commentaire indique à l'analyseur de désactiver le diagnostic V1042. La documentation donne des informations plus détaillées sur la désactivation des diagnostics à l'aide des commentaires.
  • Si vous utilisez l'utilitaire Plog Converter pour convertir des rapports, vous pouvez désactiver le diagnostic à l'aide de la touche "-d".

Pour C # V3144 est un numéro correspondant d'un diagnostic, V6071 - pour Java.

Extension de la liste des licences dangereuses


Si vous connaissez d'autres types de licences "virus" que PVS-Studio ne détecte pas à ce stade, vous pouvez nous le faire savoir via notre formulaire de commentaires. Nous les ajouterons dans la prochaine version.

Nouveaux diagnostics


C, C ++ (Général)


  • V1040 . Typo possible dans l'orthographe d'un nom de macro prédéfini.
  • V1041 . Le membre de la classe est initialisé avec une référence pendant.
  • V1042 . Ce fichier est marqué d'une licence copyleft, ce qui vous oblige à ouvrir le code source dérivé.
  • V1043 . Une variable d'objet globale est déclarée dans l'en-tête. Plusieurs copies seront créées dans toutes les unités de traduction qui incluent ce fichier d'en-tête.

Je voudrais porter une attention particulière au diagnostic avec le numéro V1040 . Nous avons réussi à trouver une erreur intéressante dans la bibliothèque du projet CMake bien connu même au stade bêta:

V1040 Typo possible dans l'orthographe d'un nom de macro prédéfini. La macro '__MINGW32_' est similaire à '__MINGW32__'. winapi.h 4112

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

Il y a une faute de frappe faite dans le nom __MINGW32_ . À la fin, un caractère de soulignement est manquant. Si vous recherchez le code avec ce nom, vous pouvez voir que la version avec deux caractères de soulignement des deux côtés est utilisée dans le projet:

Image 8

Vous pouvez consulter toutes les erreurs trouvées dans le projet CMake dans l'article: " CMake: le cas où la qualité du projet est impardonnable ".

C, C ++ (MISRA)


  • V2551 . Misra. La variable doit être déclarée dans une portée qui minimise sa visibilité.
  • V2552 . Misra. Les expressions avec le type sous-jacent enum doivent avoir des valeurs correspondant aux énumérateurs de l'énumération.
  • V2553 . Misra. L'opérateur moins unaire ne doit pas être appliqué à une expression de type non signé.
  • V2554 . Misra. Une expression contenant incrément (++) ou décrément (-) ne devrait pas avoir d'autres effets secondaires.
  • V2555 . Misra. Expression de décalage incorrecte.
  • V2556 . Misra. Utilisation d'un pointeur vers FILE lorsque le flux associé a déjà été fermé.
  • V2557 . Misra. L'opérande de l'opérateur sizeof () ne doit pas avoir d'autres effets secondaires.

C #


  • V3140 Les accesseurs de propriété utilisent différents champs de support.
  • V3141 . L'expression sous «throw» est une valeur nulle potentielle, ce qui peut conduire à NullReferenceException.
  • V3142 . Code inaccessible détecté. Il est possible qu'une erreur soit présente.
  • V3143 . Le paramètre 'value' est réécrit dans un setter de propriétés et n'est plus utilisé par la suite.
  • V3144 . Ce fichier est marqué d'une licence copyleft, ce qui vous oblige à ouvrir le code source dérivé.
  • V3145. Déréférencement dangereux d'une cible WeakReference. L'objet aurait pu être récupéré avant d'accéder à la propriété «Target».

Quant à l'analyseur C #, nous avons ajouté l'évaluation des valeurs lues / écrites à partir des getters et setters de propriété, ainsi que des méthodes asynchrones.

Nous travaillons actuellement sur l'amélioration de la surveillance des valeurs des champs et des propriétés des objets lors de leur transmission aux méthodes, ainsi que sur la surveillance du contenu des turples. Ces améliorations seront disponibles dans la prochaine version de l'analyseur.

Java


  • V6068 Utilisation suspecte de la classe BigDecimal.
  • V6069 Affectation de décalage vers la droite non signée de la valeur négative "octet" / "court".
  • V6070 Synchronisation non sécurisée sur un objet.
  • V6071 Ce fichier est marqué d'une licence copyleft, ce qui vous oblige à ouvrir le code source dérivé.

SonarQube 7.9 LTS


Sortie tant attendue


Cela fait presque 2 ans depuis la dernière version de la version LTS de SonarQube 6.7. La nouvelle version était attendue avec impatience à partir du SQ 7.x et lorsque LTS a été publié, les utilisateurs ont commencé à y basculer activement, ce qui a provoqué divers problèmes. Bientôt, SQ 7.9.1 LTS est sorti avec des corrections mineures et des développeurs de plugins tiers ont également fait des correctifs.

Heureusement, le plugin PVS-Studio n'a eu qu'un seul problème, lié au passage à Java 11, qui a été rapidement corrigé et nos clients sont immédiatement passés à une version utilisable.

Nous avons également conservé la compatibilité avec les anciennes versions de SonarQube et la liste des versions prises en charge se présente désormais comme suit: SonarQube 6.7 LTS et versions ultérieures

Plugins de langue plus pris en charge


Le plug-in PVS-Studio convertit uniquement les résultats d'analyse au format de la base de données SonarQube. En d'autres termes, il télécharge simplement les résultats de l'analyse PVS-Studuio dans SQ. Pour que l'utilitaire SonarScanner fonctionne pleinement, vous devez installer des plugins pour les langages de programmation. Nous n'avons pas commencé à développer ce qui existe déjà, nous ajoutons donc simplement le support des plugins populaires déjà existants. Dans cette version, nous avons ajouté la compatibilité avec les plugins Sonar C Community et SonarCFamily.

La liste complète des plugins de langue pris en charge ressemble à ceci:


Pour télécharger les résultats de l'analyse PVS-Studio, il suffit d'installer au moins un plugin de cette liste. La plupart des utilisateurs installent uniquement la communauté Sonar C ++, SonarC # ou SonarJava. Les plugins restants peuvent être nécessaires pour des projets plus spécifiques.

Lorsque vous choisissez des plugins, tenez compte du fait que les plugins de communauté ne sont pas compatibles avec SonarCFamily. Mais si vous utilisez uniquement SonarQube Community Edition, il n'y aura pas un tel problème.

Page Nouveaux paramètres


Auparavant, on ne pouvait configurer l'analyseur que via le fichier de configuration sonar-project.properties . Il n'y a rien à redire sur cette méthode. C'est très pratique et utilisé 99% du temps, mais nous avons créé une page de paramètres supplémentaires dans Administration> Configuration> PVS-Studio côté serveur de SonarQube, car elle peut être utilisée de préférence pour certains scénarios.

La page des paramètres ressemble à ceci:

Image 10

Lorsque vous définissez des configurations de deux manières, celles spécifiées dans le fichier sonar-project.properties sont prioritaires.

Plugin pour IntelliJ IDEA


Les sorties des nouvelles versions d'IntelliJ IDEA et de PVS-Studio diffèrent par les dates. Récemment, nous avons eu une situation où IntelliJ IDEA 192. * a été publié mais le plug-in PVS-Studio ne pouvait pas y être installé. Dans cette version, nous avons ajouté la prise en charge des dernières versions d'IntelliJ IDEA, ainsi que des améliorations pour éviter des problèmes similaires à l'avenir.

Plugins pour jenkins


Plugin PVS-Studio

PVS-Studio Plugin est destiné à publier des rapports sur les résultats de l'analyseur PVS-Studio dans le système d'intégration continue Jenkins au format HTML. Auparavant, ce plugin n'était disponible que pour les utilisateurs de Windows car il appelait automatiquement le convertisseur de rapport et ne le faisait que pour Windows. Dans PVS-Studio 7.04, le plugin ne prend en charge que les rapports HTML qui doivent être générés en une seule étape, mais cette mesure a rendu le plugin multiplateforme.

Avertissements NG Plugin

Pour Jenkins, il existe un plugin Warnings Next Generation Plugin utile pour visualiser les résultats d'analyse de divers outils. Nous avons récemment ajouté la prise en charge de PVS-Studio. La possibilité de charger les résultats d'analyse de PVS-Studio à l'aide de ce plugin est devenue disponible dans la version 6.0.0 , sa version a accidentellement coïncidé avec la version PVS-Studio 7.04:

Image 1

Autres améliorations


PVS-Studio_Cmd

PVS-Studio_Cmd.exe dispose désormais d'un mode de fonctionnement spécial - informations d'identification. Ce mode vous permet de créer un fichier de paramètres et de saisir des informations de licence sans utiliser d'interface graphique (par exemple, un plug-in Visual Studio ou un utilitaire de surveillance du compilateur C et C ++). Ce mode est particulièrement pertinent lorsqu'il est utilisé sur un serveur de build (où les utilitaires GUI peuvent être absents), dans des conteneurs, lors de l'intégration avec des solutions cloud.

Analyse des projets Unreal Engine

Nous avons ajouté l'option AutoloadUnrealEngineLog dans le plugin PVS-Studio pour Visual Studio qui vous permet de télécharger automatiquement le rapport de l'analyseur dans la fenêtre de sortie de PVS-Studio après l'analyse. Sans cette option, le journal doit être téléchargé manuellement via le menu du plugin.

La section de documentation " Analyse des projets Unreal Engine " décrit également les modifications des scripts de génération standard qui vous permettent de générer et d'analyser en une seule action. Sans modifications des scripts (lors de l'ajout du drapeau -StaticAnalyzer = PVSStudio pour lancer les arguments) le projet est seulement analysé, pas construit.

CLMonitor

Pour l'utilitaire CLMonitor, nous avons ajouté la possibilité de surveiller les exécutions du compilateur pour un processus spécifique. Cela vous permettra de surveiller les exécutions du compilateur, liées uniquement à un projet spécifique, même pendant les générations parallèles de plusieurs projets. Pour fonctionner dans ce mode, les indicateurs --parentProcessID% PID% (CLMonitor surveille les processus liés à l'enfant à celui spécifié) et --attach (CLMonitor surveille les processus liés à l'enfant à une console actuelle) sont utilisés.

pvs-studio-analyzer

L' indicateur --ignore-ccache est ajouté dans l' utilitaire pvs-studio-analyzer , qui est destiné à vérifier les projets sous Linux et macOS:

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

Si l'utilitaire ccache est utilisé dans une génération de projet, PVS-Studio fonctionne en mode d'analyse incrémentielle. Pour vérifier l'intégralité du projet sans réinitialiser le cache de l'utilitaire ccache , choisissez cet indicateur.

Liens supplémentaires


Abonnez-vous pour être informé de nos nouvelles publications:

  1. Twitter: @Code_Analysis
  2. Youtube: PVS-Studio
  3. Facebook: @StaticCodeAnalyzer
  4. Instagram: @pvsstudio
  5. Télégramme: PVS-Studio
  6. RSS: viva64-blog-en

PVS-Studio:

  1. Page produit PVS-Studio
  2. Téléchargez
  3. La documentation
  4. Les clients

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


All Articles