[ruby-core:117251] [Ruby master Bug#20348] Memory leak with method kwargs in ERB template
From:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2024-03-20 09:33:38 UTC
List:
ruby-core #117251
Issue #20348 has been updated by byroot (Jean Boussier).
Status changed from Open to Closed
Confirmed, this is a duplicate of [Bug #19907]. I'll make that one for backport.
----------------------------------------
Bug #20348: Memory leak with method kwargs in ERB template
https://bugs.ruby-lang.org/issues/20348#change-107339
* Author: davidtaylorhq (David Taylor)
* Status: Closed
* ruby -v: ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Evaluating ERB templates with kwarg method calls leads to unbounded growth in memory use.
Example script:
```ruby
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.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/