diff options
-rw-r--r-- | re.c | 9 | ||||
-rw-r--r-- | test/ruby/test_regexp.rb | 7 |
2 files changed, 15 insertions, 1 deletions
@@ -2948,7 +2948,11 @@ escape_asis: case '#': if (extended_mode && !in_char_class) { /* consume and ignore comment in extended regexp */ - while ((p < end) && ((c = *p++) != '\n')); + while ((p < end) && ((c = *p++) != '\n')) { + if ((c & 0x80) && !*encp && enc == rb_utf8_encoding()) { + *encp = enc; + } + } break; } rb_str_buf_cat(buf, (char *)&c, 1); @@ -2983,6 +2987,9 @@ escape_asis: switch (c = *p++) { default: if (!(c & 0x80)) break; + if (!*encp && enc == rb_utf8_encoding()) { + *encp = enc; + } --p; /* fallthrough */ case '\\': diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb index f10d5f3077..d04b9cf766 100644 --- a/test/ruby/test_regexp.rb +++ b/test/ruby/test_regexp.rb @@ -187,6 +187,13 @@ class TestRegexp < Test::Unit::TestCase RUBY end + def test_utf8_comment_in_usascii_extended_regexp_bug_19455 + assert_separately([], <<-RUBY) + assert_equal(Encoding::UTF_8, /(?#\u1000)/x.encoding) + assert_equal(Encoding::UTF_8, /#\u1000/x.encoding) + RUBY + end + def test_union assert_equal :ok, begin Regexp.union( |