summaryrefslogtreecommitdiff
path: root/test/ruby/test_regexp.rb
diff options
context:
space:
mode:
authorJeremy Evans <[email protected]>2021-05-12 12:37:55 -0700
committerJeremy Evans <[email protected]>2021-05-12 18:55:43 -0700
commit11ae581a4a7f5d5f5ec6378872eab8f25381b1b9 ()
treef250c8418f155fb0ee7f578085e2354bdbb7036a /test/ruby/test_regexp.rb
parent9484f9ebdf675f71811a5583c1af2415b26c932f (diff)
Fix handling of control/meta escapes in literal regexps
Ruby uses a recursive algorithm for handling control/meta escapes in strings (read_escape). However, the equivalent code for regexps (tokadd_escape) in did not use a recursive algorithm. Due to this, Handling of control/meta escapes in regexp did not have the same behavior as in strings, leading to behavior such as the following returning nil: ```ruby /\c\xFF/ =~ "\c\xFF" ``` Switch the code for handling \c, \C and \M in literal regexps to use the same code as for strings (read_escape), to keep behavior consistent between the two. Fixes [Bug #14367]
Notes: Merged: https://.com/ruby/ruby/pull/4495
-rw-r--r--test/ruby/test_regexp.rb18
1 files changed, 18 insertions, 0 deletions
@@ -496,6 +496,24 @@ class TestRegexp < Test::Unit::TestCase
assert_raise(RegexpError) { Regexp.new("((?<v>))\\g<0>") }
end
def test_unescape
assert_raise(ArgumentError) { s = '\\'; /#{ s }/ }
assert_equal(/\xFF/n, /#{ s="\\xFF" }/n)