From b9c18bdcddcc1ab6dc08988436d99d61eb8f3d7f Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 26 Jan 2008 21:01:52 +0000 Subject: [PATCH] * re.c (rb_reg_preprocess): force fixed encoding when ASCII incompatible source string. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ re.c | 8 +++++++- test/ruby/test_utf16.rb | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) 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 + + * re.c (rb_reg_preprocess): force fixed encoding when ASCII + incompatible source string. + Sat Jan 26 23:46:33 2008 Nobuyoshi Nakada * 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