diff options
author | Peter Zhu <[email protected]> | 2024-02-08 10:43:50 -0500 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2024-02-13 11:05:56 -0500 |
commit | a71d1ed83875600c174e66a8ace18e0ad451958a (patch) | |
tree | 1afb3c02d9144c14ab580a1f4f727e8c9f9c9927 /test/ruby/test_syntax.rb | |
parent | e4272fd292e7a432150e90c8dc7d8e9aa7d07e62 (diff) |
Fix memory leak when parsing invalid hash symbol
For example:
10.times do
100_000.times do
eval('{"\xC3": 1}')
rescue EncodingError
end
puts `ps -o rss= -p #{$$}`
end
Before:
32032
48464
66112
84192
100592
117520
134096
150656
167168
183760
After:
17120
17120
17120
17120
18560
18560
18560
18560
18560
18560
Diffstat (limited to 'test/ruby/test_syntax.rb')
-rw-r--r-- | test/ruby/test_syntax.rb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 854fd46027..a3aa823cdc 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -1365,6 +1365,21 @@ eom assert_valid_syntax 'p :foo, {proc do end => proc do end, b: proc do end}', bug13073 end + def test_invalid_symbol_in_hash_memory_leak + assert_no_memory_leak([], "#{<<-'begin;'}", "#{<<-'end;'}", rss: true) + str = '{"\xC3": 1}'.force_encoding("UTF-8") + code = proc do + eval(str) + raise "unreachable" + rescue EncodingError + end + + 1_000.times(&code) + begin; + 1_000_000.times(&code) + end; + end + def test_do_after_local_variable obj = Object.new def obj.m; yield; end |