[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]