Actions
Bug #20348
closedMemory leak with method kwargs in ERB template
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
Description
Evaluating ERB templates with kwarg method calls leads to unbounded growth in memory use.
Example script:
require "erb"
def noop(kwarg1:); end
template = ERB.new("<%= noop kwarg1: false %>")
50.times do
10_000.times do
template.result(binding)
end
GC.start;
puts "Object Count: #{ObjectSpace.count_objects[:TOTAL]}"
end
When run, this script will print something like:
Object Count: 53825
Object Count: 80432
Object Count: 105811
Object Count: 137331
Object Count: 179491
Object Count: 179491
Object Count: 236389
...
This issue does not occur when the keyword argument is replaced with a positional argument.
I can reproduce the issue using Ruby 3.0.6, 3.1.4, 3.2.3 and 3.3.0.
The issue does not reproduce using Ruby 2.7.8.
Updated by jeremyevans0 (Jeremy Evans) 11 months ago
This has been fixed in the master branch. However, I'm not sure which commit fixed it.
Updated by byroot (Jean Boussier) 11 months ago
I suspect it's https://github.com/ruby/ruby/pull/9973, trying to confirm.
Updated by byroot (Jean Boussier) 11 months ago
- Status changed from Open to Closed
Confirmed, this is a duplicate of [Bug #19907]. I'll make that one for backport.
Updated by byroot (Jean Boussier) 11 months ago
- Related to Bug #19907: Method calls with keyword arguments in eval leaks callcache and callinfo objects added
Actions
Like1
Like1Like0Like0Like0