]> Cypherpunks repositories - gostls13.git/commitdiff
Handle \r as a whitespace when parsing JSON string.
authorAndrew Skiba <skibaa@gmail.com>
Mon, 30 Nov 2009 20:03:26 +0000 (12:03 -0800)
committerRuss Cox <rsc@golang.org>
Mon, 30 Nov 2009 20:03:26 +0000 (12:03 -0800)
Fixes #272.

R=rsc
https://golang.org/cl/161061

src/pkg/json/parse.go
src/pkg/json/struct_test.go

index 008637593aaa1645b5704c669e7365781d62b51d..f9c472977f8dfe93f156fea5aaec1d7b61905dc8 100644 (file)
@@ -198,7 +198,7 @@ func punct(c byte) bool {
        return c == '"' || c == '[' || c == ']' || c == ':' || c == '{' || c == '}' || c == ','
 }
 
-func white(c byte) bool        { return c == ' ' || c == '\t' || c == '\n' || c == '\v' }
+func white(c byte) bool        { return c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == '\v' }
 
 func skipwhite(p string, i int) int {
        for i < len(p) && white(p[i]) {
index caf398b11eb99ddfa503c2bd40832cf6318fee15..c01f4ddeb980b6475d272dc5ef8e094d8399d193 100644 (file)
@@ -66,6 +66,17 @@ func check(t *testing.T, ok bool, name string, v interface{}) {
        }
 }
 
+const whiteSpaceEncoded = " \t{\n\"s\"\r:\"string\"\v}"
+
+func TestUnmarshalWhitespace(t *testing.T) {
+       var m myStruct;
+       ok, errtok := Unmarshal(whiteSpaceEncoded, &m);
+       if !ok {
+               t.Fatalf("Unmarshal failed near %s", errtok)
+       }
+       check(t, m.S == "string", "string", m.S);
+}
+
 func TestUnmarshal(t *testing.T) {
        var m myStruct;
        m.F = true;