Skip to content

Commit 6dfc1b0

Browse files
fix encoding RawMessage that contains leading space (#136)
* fix encoding RawMessage that contains leading space. * add json/bugs/issue136
1 parent 3b49d71 commit 6dfc1b0

File tree

7 files changed

+25
-12
lines changed

7 files changed

+25
-12
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ test-json:
1919
go test -cover -race ./json
2020

2121
test-json-bugs:
22-
go test -cover -race ./json/bugs/...
22+
go test -race ./json/bugs/...
2323

2424
test-json-1.17:
2525
go test -cover -race -tags go1.17 ./json

json/bugs/issue11/main.go

Lines changed: 0 additions & 3 deletions
This file was deleted.

json/bugs/issue136/main_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
7+
"github.com/segmentio/encoding/json"
8+
)
9+
10+
func TestIssue136(t *testing.T) {
11+
input := json.RawMessage(` null`)
12+
13+
got, err := json.Marshal(input)
14+
if err != nil {
15+
t.Fatal(err)
16+
}
17+
18+
want := bytes.TrimSpace(input)
19+
20+
if !bytes.Equal(got, want) {
21+
t.Fatalf("Marshal(%q) = %q, want %q", input, got, want)
22+
}
23+
}

json/bugs/issue18/main.go

Lines changed: 0 additions & 4 deletions
This file was deleted.

json/bugs/issue84/main.go

Lines changed: 0 additions & 3 deletions
This file was deleted.

json/encode.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,7 @@ func (e encoder) encodeRawMessage(b []byte, p unsafe.Pointer) ([]byte, error) {
858858
s = v
859859
} else {
860860
var err error
861+
v = skipSpaces(v) // don't assume that a RawMessage starts with a token.
861862
d := decoder{}
862863
s, _, _, err = d.parseValue(v)
863864
if err != nil {

json/parse.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,6 @@ func (d decoder) parseValue(b []byte) ([]byte, []byte, Kind, error) {
709709
case '{':
710710
v, b, k, err = d.parseObject(b)
711711
case '[':
712-
k = Array
713712
v, b, k, err = d.parseArray(b)
714713
case '"':
715714
v, b, k, err = d.parseString(b)

0 commit comments

Comments
 (0)