Skip to content

Portabilidad y robustez deficientes en la visualización del AST por llamadas directas a system() #10

Description

@CrysoK

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions