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.
This commit is contained in:
parent
df62a3f85a
commit
c0bb1aac10
1 changed files with 7 additions and 0 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue