L'été n'est pas seulement une saison de vacances, mais aussi une période de travail fructueux. Les journées ensoleillées sont tellement énergisées qu'elles ont suffisamment d'énergie pour les promenades tardives et les engagements de code volumineux. La deuxième version estivale de PVS-Studio 7.04 s'est avérée assez importante, nous attirons donc votre attention sur un communiqué de presse dans lequel nous parlerons de tout.
PVS-Studio est un outil pour détecter les erreurs et les vulnérabilités potentielles dans le code source des programmes écrits en C, C ++, C # et Java. Il fonctionne sur Windows, Linux et macOS.
Les capacités de l'analyseur sont bien démontrées par la vaste
collection d'erreurs dans le code que nous avons trouvé lors de la
vérification de divers projets open source.
Nous attirons votre attention sur un aperçu des nouvelles fonctionnalités incluses dans la version de PVS-Studio 7.04.
Rechercher des fichiers avec des licences Copyleft
Les développeurs d'où ils n'obtiennent tout simplement pas le code, travaillent sur la tâche. Une source populaire pour le code Copier-Coller est le site Stackoverflow et similaires. Mais il peut y avoir des situations où le programmeur prend le code du projet Open Source et ne vérifie pas les exigences de licence. Ainsi, plusieurs fichiers du projet Open Source avec licence Copyleft, c'est-à-dire obligeant à rendre public tout le code du projet. Dans les entreprises avec un grand nombre d'employés, cela est difficile à suivre, et les risques et les problèmes peuvent être graves en raison de telles actions. Ainsi, dans PVS-Studio pour toutes les langues prises en charge (C, C ++, C #, Java), des diagnostics sont apparus qui aideront à trouver de tels fichiers.
Numéros de diagnostic pour différentes langues:
Arrêtons-nous plus en détail sur ces diagnostics et analysons à quoi ils sont destinés. Un exemple de commentaire sur lequel l'analyseur émettra un avertissement:
Pour les projets fermés
Si vous ajoutez un fichier avec une telle licence (GPL3 dans ce cas) à un projet fermé, le reste du code source devra être ouvert, en raison de la nature de cette licence.
Ce type de licence copyleft est appelé une licence "
virale ", en raison de sa capacité à se propager à d'autres fichiers de projet. Le problème est que l'utilisation d'au moins un fichier avec une licence similaire dans un projet fermé ouvre automatiquement tout le code source et vous oblige à le distribuer avec les fichiers binaires.
Diagnostics recherche les licences «virales» suivantes:
- AGPL-3.0
- GPL-2.0
- GPL-3.0
- LGPL-3.0
Il existe les options suivantes, ce que vous pouvez faire lorsque vous découvrez l'utilisation de fichiers avec une licence copyleft dans un projet fermé:
- Refusez d'utiliser ce code (bibliothèque) dans votre projet;
- Remplacez la bibliothèque utilisée;
- Ouvrez votre projet.
Pour les projets open source
Nous comprenons que ce diagnostic n'est pas approprié pour les projets open source. L'équipe PVS-Studio contribue au développement de projets ouverts, aide à corriger les
erreurs en eux 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 de copyleft ci-dessus, vous pouvez désactiver ces diagnostics de la manière suivante (pour C \ C ++ c'est V1042):
- Si vous utilisez le plug-in PVS-Studio pour Visual Studio, puis en allant dans Options> PVS-Studio> Erreurs détectables> 1.Analyse générale> V1042, vous pouvez désactiver l'affichage de ce diagnostic dans la fenêtre de sortie 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é lancée à partir de la ligne de commande). Par conséquent, lors de l'ouverture d'un tel journal sur une autre machine ou de la conversion des résultats d'analyse dans un format différent, les messages désactivés de cette manière peuvent réapparaître.
- Si vous n'utilisez pas le plug-in, vous souhaitez bloquer la règle pour la commande entière ou supprimer ses messages 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 utilisant Visual C ++, une bonne option serait d'ajouter ce commentaire au fichier stdafx.h. Ce commentaire indique à l'analyseur de désactiver le diagnostic V1042. Pour plus d'informations sur la désactivation des diagnostics à l'aide de commentaires, consultez la documentation .
- Si l'utilitaire Plog Converter est utilisé pour convertir les rapports, vous pouvez désactiver les diagnostics à l'aide du commutateur "-d".
Pour C #, cela signifie V3144, respectivement, et pour Java - V6071.
Ajout à la liste des licences dangereuses
Si vous connaissez également les types de licences «virales» que l'outil ne détecte pas actuellement, vous pouvez nous en parler via le
formulaire de feedback . Et nous ajouterons leur identification 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 également mentionner les diagnostics avec le numéro
V1040 . Même en version bêta, elle a déjà trouvé une erreur intéressante dans la bibliothèque du célèbre projet CMake:
V1040 Typo possible dans l'orthographe d'un nom de macro prédéfini. La macro '__MINGW32_' est similaire à '__MINGW32__'. winapi.h 4112
#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif
Ici, ils ont fait une faute de frappe dans le nom
__MINGW32_ . Au final, un trait de soulignement manque. Si vous recherchez par code avec ce nom, vous pouvez vous assurer que le projet utilise réellement la version avec deux traits de soulignement des deux côtés:
Vous pouvez consulter toutes les erreurs trouvées dans le projet CMake dans l'article "
CMake: le cas où la qualité de son code est inexcusable pour le projet ".
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».
Également dans l'analyseur C #, le calcul des valeurs de retour / écriture à partir des méthodes d'accès aux propriétés get et set et des méthodes asynchrones a été ajouté.
Nous travaillons actuellement à l'amélioration du suivi des valeurs de champ et des propriétés des objets lors de leur transmission aux méthodes, ainsi qu'au suivi du contenu des tuples. 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
Près de 2 ans se sont écoulés depuis la dernière version de la version LTS de SonarQube 6.7. Une nouvelle version était attendue avec un zèle spécial, à commencer par SQ 7.x, et lorsque la version LTS a eu lieu, les utilisateurs ont commencé à y basculer activement, ce qui a causé divers problèmes. SQ 7.9.1 LTS a été bientôt publié avec des correctifs mineurs, et des développeurs de plugins tiers ont également préparé des correctifs.
Heureusement, dans le plugin PVS-Studio, il n'y avait qu'un seul petit problème associé à la transition vers Java 11, que nous avons rapidement corrigé, et nos clients sont immédiatement passés à une version fonctionnelle.
Nous avons également maintenu la compatibilité avec les anciennes versions de SonarQube, et la liste des versions prises en charge ressemble maintenant à ceci:
SonarQube 6.7 LTS et supérieur .
Plus de plugins de langue 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 charge simplement les résultats d'analyse PVS-Studuio dans SQ. Mais pour le fonctionnement complet de l'utilitaire SonarScanner, des plug-ins pour les langages de programmation doivent être installés. Nous n'avons pas commencé à développer ce qui existe déjà, donc nous ajoutons 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 d'analyse de PVS-Studio, il suffit d'installer au moins un plugin de cette liste. La plupart des utilisateurs n'ont besoin d'installer que la communauté Sonar C ++, SonarC # ou SonarJava. D'autres plugins peuvent être nécessaires pour des projets plus spécifiques.
Lors du choix des plugins, il est nécessaire de prendre en compte le fait que les plugins communautaires ne sont pas compatibles avec SonarCFamily. Mais si vous utilisez uniquement SonarQube Community Edition, un tel problème ne se posera pas.
Nouvelle page de paramètres
Auparavant, vous ne pouviez configurer l'analyseur que via le fichier de configuration
sonar-project.properties . Il n'y a rien à redire sur cette méthode. Il est très pratique et est utilisé dans 99% des cas, mais nous avons également créé la page des paramètres dans
Administration> Configuration> PVS-Studio sur le serveur SonarQube, car Il est également pratique à utiliser dans certains scénarios.
La page des paramètres ressemble à ceci:
Lorsque vous définissez les paramètres de deux manières, la priorité est donnée à celles spécifiées dans le fichier
sonar-project.properties .
Plugin pour IntelliJ IDEA
Les versions des nouvelles versions d'IntelliJ IDEA et de PVS-Studio diffèrent par les dates, et récemment il y a eu une situation où IntelliJ IDEA 192. * a été publié, mais le plug-in PVS-Studio n'y était pas installé. Dans cette version, nous avons ajouté la prise en charge de la dernière version d'IntelliJ IDEA et avons également apporté des améliorations pour éviter des problèmes similaires à l'avenir.
Plugins pour Jenkins
Plugin PVS-StudioPVS-Studio Plugin est destiné à publier 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 appelé automatiquement le convertisseur de rapport et ne l'a fait que pour Windows. Dans PVS-Studio 7.04, le plug-in ne prend en charge que les rapports HTML, qui doivent être générés dans une étape distincte, mais cela a permis au plug-in d'être multiplateforme.
Avertissements NG PluginPour Jenkins, il existe un
plugin Warnings Next Generation Plugin utile pour visualiser les résultats d'analyse de divers outils. Récemment, nous y avons 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 , dont la sortie coïncidait avec la sortie de PVS-Studio 7.04:
Autres améliorations
PVS-Studio_CmdUn mode de fonctionnement spécial - les informations d'identification ont été ajoutées à
PVS-Studio_Cmd.exe . Ce mode vous permet de créer un fichier de paramètres et d'entrer des informations de licence sans utiliser d'interface graphique (par exemple, un plug-in pour Visual Studio ou l'utilitaire C et C ++ Compiler Monitoring UI). Ce mode est particulièrement pertinent lorsqu'il est utilisé sur le serveur de build (où les utilitaires GUI peuvent ne pas être décrits), dans des conteneurs et lorsqu'il est intégré à des solutions cloud.
Analyse des projets Unreal EngineL'option
AutoloadUnrealEngineLog a été ajoutée au plug-in PVS-Studio pour Visual Studio, dont l'inclusion vous permet de charger automatiquement le rapport de l'analyseur dans la fenêtre de sortie PVS-Studio après avoir réussi l'analyse. Sans cette option, le chargement du journal doit être effectué manuellement via le menu du plugin.
De plus, dans la section de documentation "
Test de projets Unreal Engine ", les modifications apportées aux scripts d'assemblage standard ont été décrites, ce qui permettra l'assemblage et l'analyse en une seule action. Sans modifier les scripts (lors de l'ajout de l'
indicateur -StaticAnalyzer = PVSStudio aux arguments de démarrage), seul le projet est analysé, sans le construire.
CLMonitorPour l'utilitaire CLMonitor, la possibilité de suivre les lancements du compilateur pour un processus spécifique a été ajoutée. Cela vous permettra de suivre les démarrages des compilateurs liés uniquement à un projet spécifique, même lors de la construction de plusieurs projets en parallèle. Pour fonctionner dans ce mode, les indicateurs
--parentProcessID% PID% (CLMonitor surveille les processus qui sont enfants par rapport au spécifié) et
--attach (CLMonitor surveille les processus qui sont enfants par rapport à la console actuelle) sont utilisés.
pvs-studio-analyzerL'
indicateur --ignore-ccache a été ajouté à l'utilitaire pvs-studio-analyzer , qui est conçu pour tester des projets sur Linux et macOS:
pvs-studio-analyzer analyze ... --ignore-ccache ...
Si l'utilitaire
ccache est utilisé dans l'assemblage du projet, PVS-Studio fonctionne en mode d'analyse incrémentielle. Pour vérifier complètement le projet sans supprimer le
cache de l' utilitaire
ccache , utilisez cet indicateur.
Liens annexes
Pour vous tenir au courant de nos nouvelles publications, nous vous invitons à vous abonner:
- Twitter: pvsstudio_rus
- VKontakte: analyseur PVS-Studio
- Facebook: @StaticCodeAnalyzer
- Instagram: @pvsstudio_rus
- Télégramme: PVS-Studio rus
- RSS: viva64-blog-en
PVS-Studio:
- Page produit
- Téléchargez
- La documentation
- Les clients

Si vous souhaitez partager cet article avec un public anglophone, veuillez utiliser le lien vers la traduction: Svyatoslav Razmyslov.
PVS-Studio 7.04 .