GNU cflow 1.7 ya fue liberada y llega con nuevos comandos y mas
Después de tres años de desarrollo se dio a conocer la liberación de la nueva versión de la utilidad GNU cflow 1.7. Para quienes desconocen de esta utilidad, deben saber que está diseñada para construir un gráfico visual de llamadas a funciones en programas C, que puede usarse para simplificar el estudio de la lógica de la aplicación.
El gráfico se construye únicamente a partir del análisis de los textos fuente, sin necesidad de ejecutar el programa, ademas de que admite la generación de gráficos de flujo directo e inverso, así como la generación de listas de referencias cruzadas para archivos con código.
El paquete está en pleno funcionamiento y compila y se ejecuta en cualquier distribucion GNU/Linux y tambien en sistemas similares a UNIX más recientes. Es compatible con todos los comandos interruptores de línea requeridos por POSIX. Es capaz de producir resultados en dos formatos: en formato GNU cflow (que es predeterminado) y en formato POSIX.
Actualmente, la utilidad solo puede procesar fuentes C, ya que es la única desviación de las especificaciones POSIX, lo que requiere la capacidad de procesar Fuentes YACC y LEX, así como archivos de objetos binarios.
El módulo de Emacs cflow-mode.el funciona con archivos en formato GNU cflow (como opuesto al formato POSIX) y ha sido probado con Emacs 24.2.1.
Principales novedades de GNU cflow 1.7
En esta nueva versión del lanzamiento se destaca por la implementación de compatibilidad con el formato de salida «dot» (‘–format=dot’) para generar un resultado DOT para su posterior procesamiento en el paquete Graphviz.
Ademas tambien se destaca que se agregó la capacidad de especificar varias funciones de inicio duplicando las opciones ‘–main’, que se generará con un gráfico por separado para cada una de estas funciones.
También se destaca que se agregó la opción «–target=FUNCTION» para restringir el gráfico resultante a solo una rama que incluye ciertas funciones (la opción «–target» se puede especificar varias veces).
Otro de los cambios que se ha integrado en esta nueva versión de GNU cflow 1.7 es que se han agregado nuevos comandos para la navegación de gráficos a cflow-mode:»c» el cual sirve para ir a la función de llamada, «n» el cual sirve para ir a la siguiente función en este nivel de anidamiento y «p» para ir a la función anterior con el mismo nivel de anidamiento.
Por otra parte, tambien se menciona en el anunció de esta nueva versión de GNU cflow 1.7 que también se eliminaron dos vulnerabilidades que se identificaron en 2019 y que provocan daños en la memoria al procesar textos fuente especialmente diseñados en cflow.
De las vulnerabilidades que se solucionaron se menciona lo siguiente:
- La primera vulnerabilidad (CVE-2019-16165) se produce al acceder a la memoria después de liberarla (use-after-free) en el código del analizador (función de referencia en parser.c).
- La segunda vulnerabilidad (CVE-2019-16166) se relaciona con un desbordamiento de búfer en la función nexttoken(). En opinión de los desarrolladores, estos problemas no representan una amenaza para la seguridad, ya que se limitan a la terminación anormal de la utilidad.
Finalmente si estás interesado en poder conocer más al respecto sobre esta nueva versión, puedes consultar los detalles en el siguiente enlace.
¿Como instalar cflow en Linux?
Para quienes estén interesados en poder instalar esta utilidad en su sistema, deben saber que cflow está dentro de los repositorios de algunas de las principales distribuciones de linux. Solo he de mencionar que la nueva versión aún no se ha implementado en algunas de ellas, pero es cuestión de dias para que esté lista.
Para el caso de los que son usuarios de Debian, Ubuntu o cualquier derivado de estas, pueden instalar desde la terminal tecleando el siguiente comando:
sudo apt install cflow -y
Para el caso de los usuarios de Arch Linux, Manjaro o cualquier otra distribucion derivada de estas, la instalación la deben hacer desde los repositorios de AUR:
yay -s cflow
En cuanto a los que estén interesados en poder realizar la compilación de la nueva versión, esta la pueden obtener desde el siguiente enlace.