Une nouvelle version de l'analyseur statique de code cppcheck 2.6 est sortie, permettant de détecter diverses classes d'erreurs dans le code en C et C++, y compris lors de l'utilisation de syntaxe non standard, typique des systèmes embarqués. Une collection de plugins est fournie, assurant l'intégration de cppcheck avec différents systèmes de développement, d'intégration continue et de test, ainsi que des fonctionnalités telles que la vérification de la conformité du code au style de présentation du code. Pour l'analyse du code, il est possible d'utiliser à la fois un parseur interne et un parseur externe de Clang. Un script donate-cpu.py est également inclus pour fournir des ressources locales afin d'effectuer le travail de vérification collaborative du code des paquets Debian. Les codes sources du projet sont distribués sous la licence GPLv3.
Le développement de cppcheck se concentre sur l'identification des problèmes liés à un comportement indéfini et à l'utilisation de constructions potentiellement dangereuses. L'objectif est également de minimiser les faux positifs. Parmi les problèmes identifiés, on trouve : des pointeurs vers des objets inexistants, des divisions par zéro, des débordements entiers, des opérations de décalage de bits incorrectes, des conversions incorrectes, des problèmes de gestion de la mémoire, un usage incorrect de la STL, le déréférencement de pointeurs nuls, la réalisation de vérifications après accès effectif au tampon, le dépassement de tampon, et l'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'un opérateur return dans le corps d'une fonction ;
- écriture de données qui se chevauchent, définition d'un comportement indéfini ;
- la valeur comparée dépasse la représentation des valeurs de type ;
- l'optimisation de la copie n'est pas appliquée pour return std::move(local) ;
- un fichier ne peut pas être ouvert simultanément en lecture et en écriture dans différents flux ;
- un support pour l'affichage de messages diagnostiques dans différentes couleurs a été ajouté pour les plateformes Unix ;
- une analyse symbolique pour ValueFlow a été ajoutée. Une simple delta est utilisée pour calculer les différences entre deux variables inconnues ;
- les règles utilisées pour la liste de tokens «define» peuvent également s'appliquer à #include ;
- La balise de bibliothèque <function> peut maintenant contenir la balise <container>, et par conséquent, les fonctions free, qui peuvent accepter de tels conteneurs comme std::size, std::empty, std::begin, std::end, etc., peuvent indiquer yeld ou action pour les conteneurs;
- La balise de bibliothèque <smart-pointer> peut maintenant contenir la balise <unique> pour les pointeurs intelligents qui ont une possession exclusive (unique ownership). Un avertissement concernant les références « pendantes » à ce type de pointeurs intelligents est maintenant affiché;
- Des problèmes avec le traitement du paramètre —cppcheck-build-dir ont été corrigés;
- htmlreport peut désormais afficher des informations sur l'auteur (à l'aide de git blame);
- L'émission des avertissements concernant les variables qui ne sont pas constantes mais qui pourraient l'être a été élargie;
- Des erreurs accumulées et des lacunes de l'analyseur ont été corrigées.
Des vérifications de Misra C 2012 ont été entièrement mises en œuvre, y compris les amendements 1 et 2, à l'exception des règles 1.1, 1.2 et 17.3. Les vérifications 1.1 et 1.2 doivent être effectuées par le compilateur. La vérification 17.3 peut être effectuée par le compilateur, par exemple GCC.
Source : opennet.ru
