Similar to the last patch, this rejects a surrogate pair, which is
invalid UTF-8, when doing a range over a string.  Bootstrapped and ran
Go testsuite on x86_64-unknown-linux-gnu.  Committed to mainline and 4.7
branch.

Ian

diff -r 2a400cc3eae6 libgo/runtime/go-rune.c
--- a/libgo/runtime/go-rune.c	Fri Sep 21 23:51:25 2012 -0700
+++ b/libgo/runtime/go-rune.c	Fri Sep 21 23:57:48 2012 -0700
@@ -53,6 +53,14 @@
       *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;
     }
 

Reply via email to