aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 00d5025f6c..3f1214f33d 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 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