From 02d8bad6e12b8614f007c8c30eb50aff4bddcfb4 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Mon, 8 Jan 2024 15:14:27 -0500 Subject: [PATCH] Fix memory leak in parser for invalid syntax The strterm is leaked when there is invalid syntax. For example: 10.times do 100_000.times do begin RubyVM::InstructionSequence.compile('private def foo = puts "Hello"') rescue SyntaxError end end puts `ps -o rss= -p #{$$}` end Before: 20384 26256 32592 36720 42016 47888 53248 57456 62928 65936 After: 16720 17488 17616 17616 17616 17616 17616 17616 17616 16032 Co-Authored-By: Kevin Newton --- parse.y | 1 + 1 file changed, 1 insertion(+) diff --git a/parse.y b/parse.y index 50800708ec..8a1bda1b0c 100644 --- a/parse.y +++ b/parse.y @@ -7618,6 +7618,7 @@ yycompile0(VALUE arg) RUBY_DTRACE_PARSE_HOOK(END); p->debug_lines = 0; + xfree(p->lex.strterm); p->lex.strterm = 0; p->lex.pcur = p->lex.pbeg = p->lex.pend = 0; if (n || p->error_p) {