runtime: Fix handling of surrogate pairs in string([]rune).
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Nov 2013 23:27:29 +0000 (23:27 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Nov 2013 23:27:29 +0000 (23:27 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205422 138bc75d-0d04-0410-961f-82ee72b054a4

libgo/runtime/go-int-array-to-string.c

index d93fe65..f372131 100644 (file)
@@ -30,6 +30,8 @@ __go_int_array_to_string (const void* p, intgo len)
 
       if (v < 0 || v > 0x10ffff)
        v = 0xfffd;
+      else if (0xd800 <= v && v <= 0xdfff)
+       v = 0xfffd;
 
       if (v <= 0x7f)
        slen += 1;
@@ -56,6 +58,8 @@ __go_int_array_to_string (const void* p, intgo len)
         character.  */
       if (v < 0 || v > 0x10ffff)
        v = 0xfffd;
+      else if (0xd800 <= v && v <= 0xdfff)
+       v = 0xfffd;
 
       if (v <= 0x7f)
        *s++ = v;