diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | re.c | 28 | ||||
-rw-r--r-- | test/ruby/enc/test_utf16.rb | 6 |
3 files changed, 25 insertions, 14 deletions
@@ -1,3 +1,8 @@ +Tue Sep 16 00:57:56 2008 Tanaka Akira <akr@fsij.org> + + * re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII + incompatible characters properly. + Tue Sep 16 00:51:59 2008 NARUSE, Yui <naruse@ruby-lang.org> * encoding.c (Encoding#base_encoding): removed. [ruby-dev:36270] @@ -2860,34 +2860,34 @@ rb_reg_quote(VALUE str) case '*': case '.': case '\\': case '?': case '+': case '^': case '$': case '#': - *t++ = '\\'; + t += rb_enc_mbcput('\\', t, enc); break; case ' ': - *t++ = '\\'; - *t++ = ' '; + t += rb_enc_mbcput('\\', t, enc); + t += rb_enc_mbcput(' ', t, enc); continue; case '\t': - *t++ = '\\'; - *t++ = 't'; + t += rb_enc_mbcput('\\', t, enc); + t += rb_enc_mbcput('t', t, enc); continue; case '\n': - *t++ = '\\'; - *t++ = 'n'; + t += rb_enc_mbcput('\\', t, enc); + t += rb_enc_mbcput('n', t, enc); continue; case '\r': - *t++ = '\\'; - *t++ = 'r'; + t += rb_enc_mbcput('\\', t, enc); + t += rb_enc_mbcput('r', t, enc); continue; case '\f': - *t++ = '\\'; - *t++ = 'f'; + t += rb_enc_mbcput('\\', t, enc); + t += rb_enc_mbcput('f', t, enc); continue; case '\v': - *t++ = '\\'; - *t++ = 'v'; + t += rb_enc_mbcput('\\', t, enc); + t += rb_enc_mbcput('v', t, enc); continue; } - *t++ = c; + t += rb_enc_mbcput(c, t, enc); } rb_str_resize(tmp, t - RSTRING_PTR(tmp)); OBJ_INFECT(tmp, str); diff --git a/test/ruby/enc/test_utf16.rb b/test/ruby/enc/test_utf16.rb index a7c735f436..7f807476aa 100644 --- a/test/ruby/enc/test_utf16.rb +++ b/test/ruby/enc/test_utf16.rb @@ -355,4 +355,10 @@ EOT assert_equal("", sl.chop) assert_equal("", sb.chop) end + + def test_regexp_escape + s = "\0*".force_encoding("UTF-16BE") + r = Regexp.new(Regexp.escape(s)) + assert(r =~ s) + end end |