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:
parent
3d7a6bbc12
commit
a500eb9f8c
Notes:
git
2023-06-28 13:51:10 +00:00
@ -33,6 +33,7 @@ ripper_parser_free2(void *ptr)
|
|||||||
{
|
{
|
||||||
struct ripper *r = (struct ripper*)ptr;
|
struct ripper *r = (struct ripper*)ptr;
|
||||||
ripper_parser_free(r->p);
|
ripper_parser_free(r->p);
|
||||||
|
xfree(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
|
@ -141,6 +141,14 @@ end
|
|||||||
assert_nothing_raised { Ripper.lex src }
|
assert_nothing_raised { Ripper.lex src }
|
||||||
end
|
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
|
class TestInput < self
|
||||||
Input = Struct.new(:lines) do
|
Input = Struct.new(:lines) do
|
||||||
def gets
|
def gets
|
||||||
|
Loading…
x
Reference in New Issue
Block a user