(残念ながら) Ruby 1.8.7 で記述されたコードのブレーキマン チェックを実行しようとしています。このビルド全体が壊れて、次のエラーが発生することがあります。
regexp buffer overflow While processing
ruby 1.8.7 ではバッファが 5460 程度のように見えることに気付きました。
REGEX = /.*(?=[x])/
(0..10_000_000).each do |i|
begin
ss = StringScanner.new("a" * i + "x")
ss.scan(REGEX)
rescue RegexpError => e
p i
break
end
end
アップデート:
このエラーは ruby の StringScanner クラスによって発生します。掘り下げたところ、ここでエラーが発生していることがわかりました: https://github.com/sj26/ruby-1.9.3-p0/blob/master/ext/strscan/strscan.c#L444。このエラーが発生する原因を知っている人はいますか。さらに、テンプレートを導入した後、これが突然失敗したのはなぜですか?