📌

[Bug #20653] String#start_with? で正規表現がタイムアウトしたときにメモリリークしているバグ報告

2024/08/26に公開

[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 で修正済みです
GitHubで編集を提案

Discussion