summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDustin Brown <[email protected]>2023-12-06 19:25:29 -0800
committer<[email protected]>2023-12-06 19:25:29 -0800
commitd89280e8bf6496aa83326b5f9c293724bd1cc1e9 ()
treef9d0e1db3f273cf90f1c68ed7b20923c0586d52b
parent1ace218690d76496c5a54c45691515f8f6410a49 (diff)
Copy encoding flags when copying a regex [Bug #20039]
* :bug: Fixes [Bug #20039](https://bugs.ruby-lang.org/issues/20039) When a Regexp is initialized with another Regexp, we simply copy the properties from the original. However, the flags on the original were not being copied correctly. This caused an issue when the original had multibyte characters and was being compared with an ASCII string. Without the forced encoding flag (`KCODE_FIXED`) transferred on to the new Regexp, the comparison would fail. See the included test for an example. Co-authored-by: Nobuyoshi Nakada <[email protected]>
-rw-r--r--re.c2
-rw-r--r--test/ruby/test_regexp.rb10
2 files changed, 12 insertions, 0 deletions
@@ -3853,6 +3853,8 @@ reg_copy(VALUE copy, VALUE orig)
RB_OBJ_WRITE(copy, &RREGEXP(copy)->src, RREGEXP(orig)->src);
RREGEXP_PTR(copy)->timelimit = RREGEXP_PTR(orig)->timelimit;
rb_enc_copy(copy, orig);
return copy;
}
@@ -1936,6 +1936,16 @@ class TestRegexp < Test::Unit::TestCase
assert_equal("123456789".match(/(?:x?\dx?){2,}/)[0], "123456789")
end
def test_bug_19537 # [Bug #19537]
str = 'aac'
re = '^([ab]{1,3})(a?)*$'