Project

General

Profile

Actions

Bug #19055

closed

Regexp.new(regexp, timeout: nil) is intrupted by Regexp.timeout

Added by jaruga (Jun Aruga) over 1 year ago. Updated over 1 year ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.2.0preview2 (2022-09-09 master 35cfc9a3bb) [x86_64-linux]
[ruby-core:110287]

Description

It seems that that a code for Regexp timeout written in the release page[1] is actually interrupted by the Regexp.timeout (global configuration) in Ruby 3.2.0 preview2 built from the source. Do you know what's wrong?

$ cat reg_timeout2.rb 
Regexp.timeout = 1.0
# This regexp has no timeout
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)
long_time_re =~ "a" * 50000 + "x" # never interrupted

The error Regexp::TimeoutError appeared soon after around 1 second after running the script reg_timeout2.rb.

$ which ruby
/usr/local/ruby-3.2.0-preview2/bin/ruby

$ ruby -v
ruby 3.2.0preview2 (2022-09-09 master 35cfc9a3bb) [x86_64-linux]

$ ruby reg_timeout2.rb 
reg_timeout2.rb:4:in `<main>': regexp match timeout (Regexp::TimeoutError)

$ time ruby reg_timeout2.rb 
reg_timeout2.rb:4:in `<main>': regexp match timeout (Regexp::TimeoutError)

real	0m1.072s
user	0m1.053s
sys	0m0.014s

$ echo $?
1
$ which irb
/usr/local/ruby-3.2.0-preview2/bin/irb

$ irb
irb(main):001:0> Regexp.timeout = 1.0
=> 1.0
irb(main):002:0> long_time_re = Regexp.new("^a*b?a*$", timeout: nil)
=> /^a*b?a*$/
irb(main):003:0> long_time_re =~ "a" * 50000 + "x"
(irb):3:in `<main>': regexp match timeout (Regexp::TimeoutError)
	from /usr/local/ruby-3.2.0-preview2/lib/ruby/gems/3.2.0+2/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
	from /usr/local/ruby-3.2.0-preview2/bin/irb:25:in `load'
	from /usr/local/ruby-3.2.0-preview2/bin/irb:25:in `<main>'
irb(main):004:0> 

[1] https://www.ruby-lang.org/en/news/2022/09/09/ruby-3-2-0-preview2-released/

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0