diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-15 16:01:08 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-15 16:01:08 +0000 |
commit | 2e0a116dd5db6601dc6119392b1eb677c5664694 (patch) | |
tree | caaffc51f53c877b8e2f4023b679f5053ffc230c | |
parent | b73891b5f1b5d4109bc7a6afdd8ff08a0a96a247 (diff) | |
download | ruby-2e0a116dd5db6601dc6119392b1eb677c5664694.tar.gz |
* re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII
incompatible characters properly.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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 |