Skip to content

Posible fallo de segmentación en el formateador de errores de sintaxis en condiciones de escasez de memoria (OOM) #11

Description

@CrysoK

Descripción:
En el archivo src/bison/parser.y, la función personalizada para el reporte de errores sintácticos yyreport_syntax_error realiza llamadas consecutivas a la utilidad de concatenación de cadenas str_concat sin verificar si los punteros de retorno son válidos:

static int yyreport_syntax_error(const yypcontext_t *ctx) {
  int res = 0;
  char *msg = str_dup("");
  ...
  if(lookahead != YYSYMBOL_YYEMPTY) {
    msg = str_concat(msg, "Inesperado: ");
    ...
    msg = str_concat(msg, yysymbol_name(lookahead));
    ...
  }

La función str_concat (implementada en src/str.c) utiliza internamente realloc. Si el sistema operativo se queda sin memoria y el redimensionamiento del bloque falla, str_concat retornará NULL.

Impacto:
Al no verificar que msg sea un puntero válido tras cada asignación, la siguiente llamada consecutiva a str_concat recibirá NULL como primer parámetro de origen. Dado que la función realiza inmediatamente una llamada a strlen(source), esto provocará una desreferenciación de puntero nulo y, por consiguiente, un fallo de segmentación (Segmentation Fault) inmediato del intérprete en lugar de controlar el error de memoria.

Solución propuesta:
Validar los resultados intermedios de asignación de memoria en str_concat o asegurar que el formateador de errores maneje adecuadamente los punteros devueltos antes de realizar operaciones de lectura sobre ellos.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions