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.
Descripción:
En el archivo
src/bison/parser.y, la función personalizada para el reporte de errores sintácticosyyreport_syntax_errorrealiza llamadas consecutivas a la utilidad de concatenación de cadenasstr_concatsin verificar si los punteros de retorno son válidos:La función
str_concat(implementada ensrc/str.c) utiliza internamenterealloc. Si el sistema operativo se queda sin memoria y el redimensionamiento del bloque falla,str_concatretornaráNULL.Impacto:
Al no verificar que
msgsea un puntero válido tras cada asignación, la siguiente llamada consecutiva astr_concatrecibiráNULLcomo primer parámetro de origen. Dado que la función realiza inmediatamente una llamada astrlen(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_concato asegurar que el formateador de errores maneje adecuadamente los punteros devueltos antes de realizar operaciones de lectura sobre ellos.