ruby-changes:17877
From: naruse <ko1@a...>
Date: Wed, 24 Nov 2010 03:27:05 +0900 (JST)
Subject: [ruby-changes:17877] Ruby:r29891 (trunk): * enc/trans/utf_16_32.trans: raise error on unpaired upper
naruse 2010-11-24 03:23:03 +0900 (Wed, 24 Nov 2010) New Revision: 29891 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29891 Log: * enc/trans/utf_16_32.trans: raise error on unpaired upper surrogates. Modified files: trunk/ChangeLog trunk/enc/trans/utf_16_32.trans trunk/test/ruby/test_transcode.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 29890) +++ ChangeLog (revision 29891) @@ -1,3 +1,8 @@ +Wed Nov 24 03:21:35 2010 NARUSE, Yui <naruse@r...> + + * enc/trans/utf_16_32.trans: raise error on unpaired upper + surrogates. + Wed Nov 24 01:40:23 2010 NARUSE, Yui <naruse@r...> * enc/utf_16_32.h: add UTF-16 and UTF-32 as a dummy encoding. Index: enc/trans/utf_16_32.trans =================================================================== --- enc/trans/utf_16_32.trans (revision 29890) +++ enc/trans/utf_16_32.trans (revision 29891) @@ -289,20 +289,20 @@ } break; case BE: - if (0xD8 <= s[0] && s[0] <= 0xDB) { + if (s[0] < 0xD8 && 0xDF < s[0]) { + return (VALUE)FUNso; + } + else if (s[0] <= 0xDB) { return (VALUE)from_UTF_16BE_D8toDB_00toFF; } - else { + break; + case LE: + if (s[1] < 0xD8 && 0xDF < s[1]) { return (VALUE)FUNso; } - break; - case LE: - if (0xD8 <= s[1] && s[1] <= 0xDB) { + else if (s[1] <= 0xDB) { return (VALUE)from_UTF_16LE_00toFF_D8toDB; } - else { - return (VALUE)FUNso; - } break; } return (VALUE)INVALID; Index: test/ruby/test_transcode.rb =================================================================== --- test/ruby/test_transcode.rb (revision 29890) +++ test/ruby/test_transcode.rb (revision 29891) @@ -1023,6 +1023,8 @@ expected = "\u{3042}\u{3044}\u{20bb7}" assert_equal(expected, %w/fffe4230443042d8b7df/.pack("H*").encode("UTF-8","UTF-16")) assert_equal(expected, %w/feff30423044d842dfb7/.pack("H*").encode("UTF-8","UTF-16")) + assert_raise(Encoding::InvalidByteSequenceError){%w/feffdfb7/.pack("H*").encode("UTF-8","UTF-16")) + assert_raise(Encoding::InvalidByteSequenceError){%w/fffeb7df/.pack("H*").encode("UTF-8","UTF-16")) end def check_utf_32_both_ways(utf8, raw) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/