summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-15 16:01:08 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-15 16:01:08 +0000
commit1b8eb9c4483ee8dd578034a4c9af53fe5511d98b (patch)
treecaaffc51f53c877b8e2f4023b679f5053ffc230c
parentffb28d60388d6a8ab7beb1580bca19c78b1b1333 (diff)
downloadruby-1b8eb9c4483ee8dd578034a4c9af53fe5511d98b.tar.gz
ruby-1b8eb9c4483ee8dd578034a4c9af53fe5511d98b.tar.xz
ruby-1b8eb9c4483ee8dd578034a4c9af53fe5511d98b.zip
* re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII
incompatible characters properly. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--re.c28
-rw-r--r--test/ruby/enc/test_utf16.rb6
3 files changed, 25 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 00d5025f6..3f1214f33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]
diff --git a/re.c b/re.c
index c0280f545..b47ec108e 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 a7c735f43..7f807476a 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