diff --git a/ChangeLog b/ChangeLog index 00d5025f6c..3f1214f33d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Sep 16 00:57:56 2008 Tanaka Akira + + * re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII + incompatible characters properly. + Tue Sep 16 00:51:59 2008 NARUSE, Yui * encoding.c (Encoding#base_encoding): removed. [ruby-dev:36270] diff --git a/re.c b/re.c index c0280f545a..b47ec108e6 100644 --- a/re.c +++ b/re.c @@ -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