From: Mattias EngdegÄrd Date: Mon, 29 Aug 2022 15:44:31 +0000 (+0200) Subject: Fix reader memory leak upon error (bug#56623) X-Git-Tag: emacs-29.0.90~1856^2~837 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c0bb1aac102f8727484763370b154f635a6a1fd1;p=emacs.git Fix reader memory leak upon error (bug#56623) Reported by Tom Gillespie; error found by Greg Hendershott. * src/lread.c (read_stack_reset): New. (read0): Reset read stack when unwinding from an error. --- diff --git a/src/lread.c b/src/lread.c index ccccd79cd7c..15bbf46f78f 100644 --- a/src/lread.c +++ b/src/lread.c @@ -3686,6 +3686,12 @@ read_stack_push (struct read_stack_entry e) rdstack.stack[rdstack.sp++] = e; } +static void +read_stack_reset (intmax_t sp) +{ + eassert (sp <= rdstack.sp); + rdstack.sp = sp; +} /* Read a Lisp object. If LOCATE_SYMS is true, symbols are read with position. */ @@ -3699,6 +3705,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms) specpdl_ref count = SPECPDL_INDEX (); ptrdiff_t base_sp = rdstack.sp; + record_unwind_protect_intmax (read_stack_reset, base_sp); bool uninterned_symbol; bool skip_shorthand;