📌
[Bug #20653] String#start_with? で正規表現がタイムアウトしたときにメモリリークしているバグ報告
[Bug #20653] Memory leak in String#start_with? when regexp times out
-
String#start_with?
で正規表現のタイムアウトが発生したときにメモリリークしているというバグ報告
regex = Regexp.new("^#{"(a*)" * 10_000}x$", timeout: 0.000001)
str = "a" * 1000000 + "x"
10.times do
100.times do
# #start_with? でタイムアウトしたときにメモリリークが発生する
str.start_with?(regex)
rescue
end
puts `ps -o rss= -p #{$$}`
end
__END__
output:
37504
53248
68864
84736
100352
115968
131712
147456
163072
178816
- Onigmo の処理でタイムアウトしたかどうかのエラーハンドリングを追加して改善しているみたいです
- このバグは開発版の Ruby 3.4 で修正済みです
Discussion