summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--encoding.c4
-rw-r--r--test/ruby/test_m17n.rb2
3 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 62bcbdd766..dcd2bbe11f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Aug 12 07:41:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): If a string is empty and
+ other's encoding is US-ASCII, returns the empty string's encoding.
+ [ruby-list:46274]
+
Wed Aug 12 07:38:12 2009 NARUSE, Yui <naruse@ruby-lang.org>
* encoding.c (is_data_encoding): fix condition.
diff --git a/encoding.c b/encoding.c
index 42b2475f41..2118eba3e4 100644
--- a/encoding.c
+++ b/encoding.c
@@ -709,9 +709,9 @@ rb_enc_compatible(VALUE str1, VALUE str2)
enc2 = rb_enc_from_index(idx2);
if (TYPE(str2) == T_STRING && RSTRING_LEN(str2) == 0)
- return enc1;
+ return (idx1 == ENCINDEX_US_ASCII && rb_enc_asciicompat(enc2)) ? enc2 : enc1;
if (TYPE(str1) == T_STRING && RSTRING_LEN(str1) == 0)
- return enc2;
+ return (idx2 == ENCINDEX_US_ASCII && rb_enc_asciicompat(enc1)) ? enc1 : enc2;
if (!rb_enc_asciicompat(enc1) || !rb_enc_asciicompat(enc2)) {
return 0;
}
diff --git a/test/ruby/test_m17n.rb b/test/ruby/test_m17n.rb
index cbab1f6692..25bb0df3b0 100644
--- a/test/ruby/test_m17n.rb
+++ b/test/ruby/test_m17n.rb
@@ -7,6 +7,7 @@ class TestM17N < Test::Unit::TestCase
end
module AESU
+ def ua(str) str.dup.force_encoding("US-ASCII") end
def a(str) str.dup.force_encoding("ASCII-8BIT") end
def e(str) str.dup.force_encoding("EUC-JP") end
def s(str) str.dup.force_encoding("Windows-31J") end
@@ -1300,6 +1301,7 @@ class TestM17N < Test::Unit::TestCase
def test_compatible
assert_nil Encoding.compatible?("",0)
+ assert_equal(Encoding::UTF_8, Encoding.compatible?(u(""), ua("abc")))
assert_equal(Encoding::UTF_8, Encoding.compatible?(Encoding::UTF_8, Encoding::UTF_8))
assert_equal(Encoding::UTF_8, Encoding.compatible?(Encoding::UTF_8, Encoding::US_ASCII))
assert_equal(Encoding::ASCII_8BIT,