aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--re.c8
-rw-r--r--test/ruby/test_utf16.rb6
3 files changed, 18 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c74745c496..6687baac1e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Jan 27 05:56:39 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_preprocess): force fixed encoding when ASCII
+ incompatible source string.
+
Sat Jan 26 23:46:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* sprintf.c (rb_str_format): zero-precision zero should be empty.
diff --git a/re.c b/re.c
index a03bea5751..0237319076 100644
--- a/re.c
+++ b/re.c
@@ -1908,7 +1908,13 @@ rb_reg_preprocess(const char *p, const char *end, rb_encoding *enc,
buf = rb_str_buf_new(0);
- *fixed_enc = 0;
+ if (rb_enc_asciicompat(enc))
+ *fixed_enc = 0;
+ else {
+ *fixed_enc = enc;
+ rb_enc_associate(buf, enc);
+ }
+
if (unescape_nonascii(p, end, enc, buf, fixed_enc, err) != 0)
return Qnil;
diff --git a/test/ruby/test_utf16.rb b/test/ruby/test_utf16.rb
index 0a4bd4586c..aeb9cea133 100644
--- a/test/ruby/test_utf16.rb
+++ b/test/ruby/test_utf16.rb
@@ -115,4 +115,10 @@ class TestUTF16 < Test::Unit::TestCase
def test_regexp_union
enccall(Regexp, :union, "aa".force_encoding("utf-16be"), "bb".force_encoding("utf-16be"))
end
+
+ def test_empty_regexp
+ s = "".force_encoding("utf-16be")
+ assert_equal(Encoding.find("utf-16be"), Regexp.new(s).encoding,
+ "Regexp.new(#{encdump s}).encoding")
+ end
end