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.
Actions
Like1
Like1Like0Like0Like0