aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2023-08-09 11:03:13 -0400
committerPeter Zhu <peter@peterzhu.ca>2023-08-09 14:06:58 -0400
commit5bc8fceca8d47ed1ef9c603c6531a408de36b60c (patch)
treee0369c5b3b2edbccc5c656241ca885b01e149109 /test
parentd3efce69eaabf1ff81bcdf3631350a87ac0dda28 (diff)
downloadruby-5bc8fceca8d47ed1ef9c603c6531a408de36b60c.tar.gz
Fix memory leak in parser for incomplete tokens
[Bug #19835] The parser does not free the `tbl` of the `struct vtable` when there are leftover `lvtbl` in the parser. This causes a memory leak. The following script reproduces this issue: ``` 10.times do 100_000.times do Ripper.parse("class Foo") end puts `ps -o rss= -p #{$$}` end ```
Diffstat (limited to 'test')
-rw-r--r--test/ripper/test_ripper.rb7
1 files changed, 7 insertions, 0 deletions
diff --git a/test/ripper/test_ripper.rb b/test/ripper/test_ripper.rb
index 2bb307eddf..25ddc381cc 100644
--- a/test/ripper/test_ripper.rb
+++ b/test/ripper/test_ripper.rb
@@ -154,6 +154,13 @@ end
Ripper.parse("")
end
end;
+
+ # [Bug #19835]
+ assert_no_memory_leak(%w(-rripper), "", "#{<<~'end;'}", rss: true)
+ 1_000_000.times do
+ Ripper.parse("class Foo")
+ end
+ end;
end
class TestInput < self