From 78f5b54f1b2cdacfc4fab9b37cc71a1d195d9424 Mon Sep 17 00:00:00 2001 From: naruse Date: Sat, 12 Jun 2010 17:13:54 +0000 Subject: * 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 --- ChangeLog | 5 +++++ enc/trans/utf8_mac.trans | 4 ++-- test/ruby/test_econv.rb | 8 -------- test/ruby/test_transcode.rb | 10 ++++++++++ 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 + + * 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 * 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")})) -- cgit v1.2.3