From 2d2e28d02c18668856b7d55fad40cac4f875fa3e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 13 Feb 2006 13:09:23 +0000 Subject: [PATCH] * Override YYMALLOC and YYFREE so that we can call AT[un]protectMemory on the Bison parse stack. Otherwise, a garbage collect during parsing could lead to a crash. --- src/libexpr/parser.y | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y index fe87734f20..ec07a01919 100644 --- a/src/libexpr/parser.y +++ b/src/libexpr/parser.y @@ -43,6 +43,26 @@ static Pos makeCurPos(YYLTYPE * loc, void * data) } #define CUR_POS makeCurPos(yylocp, data) + + +/* Make sure that the parse stack is scanned by the ATerm garbage + collector. */ +static void * mallocAndProtect(size_t size) +{ + void * p = malloc(size); + if (p) ATprotectMemory(p, size); + return p; +} + +static void freeAndUnprotect(void * p) +{ + ATunprotectMemory(p); + free(p); +} + +#define YYMALLOC mallocAndProtect +#define YYFREE freeAndUnprotect + %}