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 <kddnewton@gmail.com>
This commit is contained in:
Peter Zhu 2024-01-08 15:14:27 -05:00
Родитель 38bc107f0b
Коммит 02d8bad6e1
1 изменённых файлов: 1 добавлений и 0 удалений

Просмотреть файл

@ -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) {