OSDN Git Service

runtime: Reject surrogate pairs in range over string.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 22 Sep 2012 07:19:09 +0000 (07:19 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 22 Sep 2012 07:19:09 +0000 (07:19 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@191639 138bc75d-0d04-0410-961f-82ee72b054a4

libgo/runtime/go-rune.c

index 7e31eb8..acdecb0 100644 (file)
@@ -53,6 +53,14 @@ __go_get_rune (const unsigned char *str, size_t len, int *rune)
       *rune = (((c & 0xf) << 12)
               + ((c1 & 0x3f) << 6)
               + (c2 & 0x3f));
+
+      if (*rune >= 0xd800 && *rune < 0xe000)
+       {
+         /* Invalid surrogate half; return replace character.  */
+         *rune = 0xfffd;
+         return 1;
+       }
+
       return 3;
     }