mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
35 lines
899 B
Ruby
35 lines
899 B
Ruby
require_relative '../../spec_helper'
|
|
|
|
ruby_version_is "3.2" do
|
|
describe "Regexp.timeout" do
|
|
after :each do
|
|
Regexp.timeout = nil
|
|
end
|
|
|
|
it "returns global timeout" do
|
|
Regexp.timeout = 3
|
|
Regexp.timeout.should == 3
|
|
end
|
|
|
|
it "raises Regexp::TimeoutError after global timeout elapsed" do
|
|
Regexp.timeout = 0.001
|
|
Regexp.timeout.should == 0.001
|
|
|
|
-> {
|
|
# A typical ReDoS case
|
|
/^(a*)*$/ =~ "a" * 1000000 + "x"
|
|
}.should raise_error(Regexp::TimeoutError, "regexp match timeout")
|
|
end
|
|
|
|
it "raises Regexp::TimeoutError after timeout keyword value elapsed" do
|
|
Regexp.timeout = 3 # This should be ignored
|
|
Regexp.timeout.should == 3
|
|
|
|
re = Regexp.new("^a*b?a*$", timeout: 0.001)
|
|
|
|
-> {
|
|
re =~ "a" * 1000000 + "x"
|
|
}.should raise_error(Regexp::TimeoutError, "regexp match timeout")
|
|
end
|
|
end
|
|
end
|