summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-12 17:13:54 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-12 17:13:54 +0000
commit78f5b54f1b2cdacfc4fab9b37cc71a1d195d9424 (patch)
treea453088e199e488b37e4e1e4c74a2cb73043c1f1
parent051af24359916791ee09cc6c685d9668e780b61f (diff)
* enc/trans/utf8_mac.trans (buf_apply): fix for patterns
whose result is 2 bytes. [ruby-core:30751] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28307 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--enc/trans/utf8_mac.trans4
-rw-r--r--test/ruby/test_econv.rb8
-rw-r--r--test/ruby/test_transcode.rb10
4 files changed, 17 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 1b1700d721..0370a0b47d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Jun 13 02:12:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac.trans (buf_apply): fix for patterns
+ whose result is 2 bytes. [ruby-core:30751]
+
Sun Jun 13 01:38:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
* time.c (rb_localtime_r2): fix mixed declarations and code.
diff --git a/enc/trans/utf8_mac.trans b/enc/trans/utf8_mac.trans
index 3ceb07eeb4..0d69dba46a 100644
--- a/enc/trans/utf8_mac.trans
+++ b/enc/trans/utf8_mac.trans
@@ -150,10 +150,10 @@ buf_apply(int mode, struct from_utf8_mac_status *sp, unsigned char *o)
next_info = get_info(next_info, sp);
switch (next_info & 0x1F) {
case THREEbt:
- o[n++] = getBT1(next_info);
case TWObt:
+ o[n++] = getBT1(next_info);
o[n++] = getBT2(next_info);
- o[n++] = getBT3(next_info);
+ if (THREEbt == (next_info & 0x1F)) o[n++] = getBT3(next_info);
if (mode == 3) {
buf_clear(sp);
}
diff --git a/test/ruby/test_econv.rb b/test/ruby/test_econv.rb
index cc03eaf218..00682f69cd 100644
--- a/test/ruby/test_econv.rb
+++ b/test/ruby/test_econv.rb
@@ -892,12 +892,4 @@ class TestEncodingConverter < Test::Unit::TestCase
"".encode("euc-jp", :undef => :replace, :replace => broken)
}
end
-
- def test_utf8_mac
- assert_equal("\u{fb4d}", "\u05DB\u05BF".encode("UTF-8", "UTF8-MAC"))
- assert_equal("\u{1ff7}", "\u03C9\u0345\u0342".encode("UTF-8", "UTF8-MAC"))
-
- assert_equal("\u05DB\u05BF", "\u{fb4d}".encode("UTF8-MAC").force_encoding("UTF-8"))
- assert_equal("\u03C9\u0345\u0342", "\u{1ff7}".encode("UTF8-MAC").force_encoding("UTF-8"))
- end
end
diff --git a/test/ruby/test_transcode.rb b/test/ruby/test_transcode.rb
index 6349d3b29b..1b15a5b556 100644
--- a/test/ruby/test_transcode.rb
+++ b/test/ruby/test_transcode.rb
@@ -1912,6 +1912,16 @@ class TestTranscode < Test::Unit::TestCase
assert_equal(Encoding::Shift_JIS, b.encoding)
end
+ def test_utf8_mac
+ assert_equal("\u{fb4d}", "\u05DB\u05BF".encode("UTF-8", "UTF8-MAC"))
+ assert_equal("\u{1ff7}", "\u03C9\u0345\u0342".encode("UTF-8", "UTF8-MAC"))
+
+ assert_equal("\u05DB\u05BF", "\u{fb4d}".encode("UTF8-MAC").force_encoding("UTF-8"))
+ assert_equal("\u03C9\u0345\u0342", "\u{1ff7}".encode("UTF8-MAC").force_encoding("UTF-8"))
+
+ check_both_ways("\u{e9 74 e8}", "e\u0301te\u0300", 'UTF8-MAC')
+ end
+
def test_fallback
assert_equal("\u3042".encode("EUC-JP"), "\u{20000}".encode("EUC-JP",
fallback: {"\u{20000}" => "\u3042".encode("EUC-JP")}))