Выпуск утилиты GNU cflow 1.7

После трёх лет разработки опубликован выпуск утилиты GNU cflow 1.7, предназначенной для построения наглядного графа вызовов функций в программах на языке Си, который может использоваться для упрощения изучения логики работы приложения. Граф строится только на основе анализа исходных текстов, без необходимости выполнения программы. Поддерживается генерация как прямых, так и обратных графов потоков выполнения, а также генерация списков перекрёстных ссылок для файлов с кодом.

Выпуск примечателен реализацией поддержки формата вывода “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(). По мнению разработчиков, указанные проблемы не представляют угрозы безопасности, так как ограничиваются аварийным завершением утилиты.

Release. Ссылка here.