След три години разработка, публикувана е версия 1.7 на утилитата GNU cflow, предназначена за изграждане на визуален граф на повикванията на функции в програми на езика C, който може да се използва за улесняване на изучаването на логиката на приложението. Графът се изгражда само на базата на анализ на изходния код, без да е необходимо изпълнение на програмата. Поддържа се генерирането както на директни, така и на обратни графове на потока на изпълнение, както и генерирането на списъци с кръстосани връзки за файлове с код.
Изданието е забележително с реализирането на поддръжка на формат „dot“ (‘—format=dot’) за формиране на резултат на езика DOT за последваща визуализация в пакета Graphviz. Добавена е възможност за указване на множество стартови функции чрез дублиране на опцията ‘—main’; за всяка от тези функции ще бъде генериран отделен граф. Освен това е добавена опцията «—target=FUNCTION», която позволява ограничаване на резултатния граф само до клона, включващ определени функции (опцията «—target» може да се указва множество пъти). В режим cflow-mode са добавени нови команди за навигация по графа: «c» — преминаване към извикващата функция, «n» — преминаване към следващата функция на същото ниво на вложеност и «p» — преминаване към предишната функция с едно и също ниво на вложеност.
В новата версия също така са отстранени две уязвимости, които бяха открити още през 2019 година и водят до повреда на паметта при обработка на специално форматирани изходни текстове в cflow. Първата уязвимост (CVE-2019-16165) е причинена от достъп до паметта след нейното освобождаване (use-after-free) в кода на парсера (функция reference в parser.c). Втората уязвимост (CVE-2019-16166) е свързана с преливане на буфера в функцията nexttoken(). Според разработчиците, посочените проблеми не представляват заплаха за сигурността, тъй като се ограничават до аварийно приключване на утилитата.
Източник: opennet.ru
