Después de tres años de desarrollo, se ha publicado la versión 1.7 de la herramienta GNU cflow, diseñada para construir un gráfico visual de llamadas a funciones en programas en lenguaje C, que puede utilizarse para facilitar el estudio de la lógica de funcionamiento de la aplicación. El gráfico se construye únicamente a partir del análisis de los códigos fuente, sin necesidad de ejecutar el programa. Se admite la generación de gráficos tanto directos como inversos de los flujos de ejecución, así como la generación de listas de referencias cruzadas para los archivos de código.
La versión es notable por la implementación de soporte para el formato de salida 'dot' ('—format=dot') para generar resultados en el lenguaje DOT para su posterior visualización en el paquete Graphviz. Se ha añadido la posibilidad de indicar varias funciones de inicio a través de la duplicación de opciones '—main', y se generará un gráfico separado para cada una de estas funciones. También se ha añadido la opción '—target=FUNCTION', que permite limitar el gráfico resultante solo a la rama que incluye funciones específicas (la opción '—target' se puede especificar varias veces). Se han agregado nuevos comandos para navegar por el gráfico en el modo cflow: 'c' — ir a la función que llama, 'n' — ir a la siguiente función en el mismo nivel de anidación y 'p' — ir a la función anterior con el mismo nivel de anidación.
En la nueva versión, también se han solucionado dos vulnerabilidades que se detectaron en 2019 y que provocan la corrupción de memoria al procesar códigos fuente especialmente formateados en cflow. La primera vulnerabilidad (CVE-2019-16165) se debe a un acceso a la memoria después de haber sido liberada (use-after-free) en el código del analizador (función reference en parser.c). La segunda vulnerabilidad (CVE-2019-16166) está relacionada con un desbordamiento de buffer en la función nexttoken(). Según los desarrolladores, estos problemas no representan una amenaza de seguridad, ya que se limitan a provocar la finalización inesperada de la herramienta.
Fuente: opennet.ru
