diff options
author | Dustin Brown <dbrown9@gmail.com> | 2023-12-06 19:25:29 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-06 19:25:29 -0800 |
commit | d89280e8bf6496aa83326b5f9c293724bd1cc1e9 (patch) | |
tree | f9d0e1db3f273cf90f1c68ed7b20923c0586d52b /re.c | |
parent | 1ace218690d76496c5a54c45691515f8f6410a49 (diff) | |
download | ruby-d89280e8bf6496aa83326b5f9c293724bd1cc1e9.tar.gz |
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 <nobu@ruby-lang.org>
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 2 |
1 files changed, 2 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); + FL_SET_RAW(copy, FL_TEST_RAW(orig, KCODE_FIXED|REG_ENCODING_NONE)); + return copy; } |