Sortie de cppcheck 2.6, un analyseur de code statique pour les langages C++ et C

Une nouvelle version de l'analyseur de code statique cppcheck 2.6 a été publiée, qui vous permet d'identifier diverses classes d'erreurs dans le code dans les langages C et C++, y compris lors de l'utilisation d'une syntaxe non standard, typique des systèmes embarqués. Une collection de plugins est fournie grâce à laquelle cppcheck est intégré à divers systèmes de développement, d'intégration continue et de test, et fournit également des fonctionnalités telles que la vérification de la conformité du code avec le style de code. Pour analyser le code, vous pouvez utiliser soit votre propre analyseur, soit un analyseur externe de Clang. Il inclut également le script donate-cpu.py pour fournir des ressources locales permettant d'effectuer un travail collaboratif de révision du code pour les paquets Debian. Le code source du projet est distribué sous licence GPLv3.

Le développement de cppcheck se concentre sur l'identification des problèmes associés à un comportement indéfini et à l'utilisation de conceptions dangereuses du point de vue de la sécurité. L’objectif est également de minimiser les faux positifs. Parmi les problèmes identifiés : pointeurs vers des objets inexistants, divisions par zéro, dépassements d'entiers, opérations de décalage de bits incorrectes, conversions incorrectes, problèmes de travail avec la mémoire, utilisation incorrecte de STL, déréférencement de pointeurs nuls, utilisation de contrôles après l'accès effectif au buffer, dépassements de buffer, utilisation de variables non initialisées.

Dans la nouvelle version:

  • Les vérifications suivantes ont été ajoutées au cœur de l'analyseur :
    • absence d'opérateur de retour dans le corps de la fonction ;
    • enregistre les données qui se chevauchent, détermine un comportement indéfini ;
    • la valeur comparée est en dehors de la représentation de valeur du type ;
    • l'optimisation de la copie ne s'applique pas à return std::move(local);
    • le fichier ne peut pas être ouvert simultanément en lecture et en écriture dans différents flux (stream) ;
  • pour les plates-formes Unix, ajout de la prise en charge de l'affichage des messages de diagnostic dans différentes couleurs ;
  • ajout d'une analyse symbolique pour ValueFlow. Utilise un simple delta lors du calcul de la différence entre deux variables inconnues ;
  • les règles utilisées pour la liste des tokens "define" peuvent également correspondre à #include ;
  • balise de bibliothèque peut maintenant contenir une balise , et par conséquent les fonctions gratuites, qui peuvent accepter des conteneurs tels que std::size, std::empty, std::begin, std::end, etc. peut spécifier le rendement ou l'action des connecteurs ;
  • balise de bibliothèque peut maintenant contenir une balise pour les pointeurs intelligents qui ont une propriété unique. Un avertissement est désormais émis concernant les références pendantes à ces types de pointeurs intelligents ;
  • correction de problèmes de traitement du paramètre —cppcheck-build-dir ;
  • htmlreport peut désormais afficher des informations sur l'auteur (en utilisant git blâme) ;
  • des avertissements étendus sur les variables qui ne sont pas constantes, mais qui pourraient l'être ;
  • Les erreurs et défauts accumulés de l'analyseur ont été corrigés.

De plus, les contrôles de Misra C 2012, y compris l'amendement 1 et l'amendement 2, ont été entièrement mis en œuvre, à l'exception des règles 1.1, 1.2 et 17.3. Les contrôles 1.1 et 1.2 doivent être effectués par le compilateur. La vérification 17.3 peut être effectuée par un compilateur tel que GCC.

Source: opennet.ru

Ajouter un commentaire