Descripción:
En el archivo src/graph.c, la función graphviz utiliza llamadas directas a la función estándar de C system() para compilar el archivo .dot e iniciar el visor de imágenes correspondiente de manera dependiente de la plataforma:
#ifdef _WIN32
char *no_echo = "1>nul 2>nul";
char *start_viewer = str_concat(str_dup(""), "start ast.png ");
start_viewer = str_concat(start_viewer, no_echo);
#else
char *no_echo = "1>/dev/null 2>/dev/null";
char *start_viewer = str_concat(str_dup(""), "open ast.png ");
start_viewer = str_concat(start_viewer, no_echo);
#endif
...
int r = system(cmd);
Problema:
La función system() depende enteramente del shell predeterminado del sistema operativo e invoca comandos intérpretes como start (que es un comando interno de cmd.exe en Windows). Si el intérprete de Aleph es invocado desde un entorno no estándar (como ciertas terminales integradas de IDEs o emuladores de terminal en Windows que no heredan correctamente la variable COMSPEC), la llamada a system() fallará silenciosamente o de forma imprevista.
Solución propuesta:
Abstraer o desacoplar la ejecución automática del visor de imágenes, o reemplazar las llamadas directas de system() por APIs de sistema nativas más robustas y seguras para el manejo de procesos (por ejemplo, CreateProcess en Windows, o fork/exec en sistemas POSIX).
Descripción:
En el archivo
src/graph.c, la funcióngraphvizutiliza llamadas directas a la función estándar de Csystem()para compilar el archivo.dote iniciar el visor de imágenes correspondiente de manera dependiente de la plataforma:Problema:
La función
system()depende enteramente del shell predeterminado del sistema operativo e invoca comandos intérpretes comostart(que es un comando interno decmd.exeen Windows). Si el intérprete de Aleph es invocado desde un entorno no estándar (como ciertas terminales integradas de IDEs o emuladores de terminal en Windows que no heredan correctamente la variableCOMSPEC), la llamada asystem()fallará silenciosamente o de forma imprevista.Solución propuesta:
Abstraer o desacoplar la ejecución automática del visor de imágenes, o reemplazar las llamadas directas de
system()por APIs de sistema nativas más robustas y seguras para el manejo de procesos (por ejemplo,CreateProcessen Windows, ofork/execen sistemas POSIX).