我正在尝试对(不幸的是)用 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 。有谁知道是什么导致了这个错误。而且,为什么这在引入模板后突然失败了?