summaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2013-11-26 23:27:29 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2013-11-26 23:27:29 +0000
commit763d87526f385ac111986736dccd0e6848b85d33 (patch)
tree5262a40dd465830841d2131acb63eab83331249b /libgo
parentb168a8dfcc8e22dd932d460159d81291a9fe1ae6 (diff)
downloadgcc-763d87526f385ac111986736dccd0e6848b85d33.tar.gz
runtime: Fix handling of surrogate pairs in string([]rune).
From-SVN: r205422
Diffstat (limited to 'libgo')
-rw-r--r--libgo/runtime/go-int-array-to-string.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libgo/runtime/go-int-array-to-string.c b/libgo/runtime/go-int-array-to-string.c
index d93fe651d95..f37213125a2 100644
--- a/libgo/runtime/go-int-array-to-string.c
+++ b/libgo/runtime/go-int-array-to-string.c
@@ -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;