Fix memory leak in Ripper

The following script leaks memory in Ripper:

```ruby
require "ripper"

20.times do
  100_000.times do
    Ripper.parse("")
  end

  puts `ps -o rss= -p #{$$}`
end
```
This commit is contained in:
Peter Zhu 2023-06-27 14:34:03 -04:00
parent 3d7a6bbc12
commit a500eb9f8c
Notes: git 2023-06-28 13:51:10 +00:00
2 changed files with 9 additions and 0 deletions

View File

@ -33,6 +33,7 @@ ripper_parser_free2(void *ptr)
{
struct ripper *r = (struct ripper*)ptr;
ripper_parser_free(r->p);
xfree(r);
}
static size_t

View File

@ -141,6 +141,14 @@ end
assert_nothing_raised { Ripper.lex src }
end
def test_no_memory_leak
assert_no_memory_leak(%w(-rripper), "", "#{<<~'end;'}", rss: true)
10_000_000.times do
Ripper.parse("")
end
end;
end
class TestInput < self
Input = Struct.new(:lines) do
def gets