Après trois ans de développement, la version 1.7 de l'outil GNU cflow a été publiée, visant à créer un graphique visuel des appels de fonctions dans les programmes en langage C, qui peut être utilisé pour faciliter la compréhension de la logique d'une application. Le graphique est construit uniquement sur la base de l'analyse des codes sources, sans nécessiter d'exécution du programme. La génération de graphiques directs et inverses des flux d'exécution est prise en charge, ainsi que la génération de listes de références croisées pour les fichiers de code.
Cette version se distingue par l'implémentation du support du format de sortie «dot» (‘—format=dot’) pour produire des résultats au format DOT pour une visualisation ultérieure dans le paquet Graphviz. La possibilité de spécifier plusieurs fonctions de départ en dupliquant les options ‘—main’ a été ajoutée ; un graphique distinct sera généré pour chacune de ces fonctions. De plus, une option «—target=FUNCTION» a été introduite, permettant de restreindre le graphique résultant uniquement à la branche incluant certaines fonctions (l'option «—target» peut être spécifiée plusieurs fois). Dans le mode cflow, de nouvelles commandes ont été ajoutées pour naviguer dans le graphique : «c» — aller à la fonction appelante, «n» — aller à la fonction suivante au même niveau d'imbrication et «p» — aller à la fonction précédente au même niveau d'imbrication.
Dans la nouvelle version, deux vulnérabilités révélées en 2019, entraînant des corruptions de mémoire lors du traitement de codes sources spécialement formatés dans cflow, ont également été corrigées. La première vulnérabilité (CVE-2019-16165) est causée par un accès à la mémoire après sa libération (use-after-free) dans le code du parseur (fonction reference dans parser.c). La deuxième vulnérabilité (CVE-2019-16166) est liée à un dépassement de tampon dans la fonction nexttoken(). Selon les développeurs, ces problèmes ne représentent pas une menace pour la sécurité, car ils se limitent à un arrêt anormal de l'outil.
Source : opennet.ru
