From: Brad Fitzpatrick Date: Sun, 10 Apr 2016 17:16:41 +0000 (-0700) Subject: encoding/json: marshal the RawMessage value type the same as its pointer type X-Git-Tag: go1.8beta1~591 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1625da24106b610f89ff7a67a11581df95f8e234;p=gostls13.git encoding/json: marshal the RawMessage value type the same as its pointer type Fixes #14493 Updates #6458 (changes its behavior) Change-Id: I851a8113fd312dae3384e989ec2b70949dc22838 Reviewed-on: https://go-review.googlesource.com/21811 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Quentin Smith --- diff --git a/api/except.txt b/api/except.txt index 4040d14556..93302ec819 100644 --- a/api/except.txt +++ b/api/except.txt @@ -1,3 +1,4 @@ +pkg encoding/json, method (*RawMessage) MarshalJSON() ([]uint8, error) pkg net, func ListenUnixgram(string, *UnixAddr) (*UDPConn, error) pkg syscall (darwin-386), func Fchflags(string, int) error pkg syscall (darwin-386-cgo), func Fchflags(string, int) error diff --git a/src/encoding/json/encode_test.go b/src/encoding/json/encode_test.go index 13e765afa3..507581feed 100644 --- a/src/encoding/json/encode_test.go +++ b/src/encoding/json/encode_test.go @@ -440,7 +440,9 @@ func TestIssue6458(t *testing.T) { t.Fatal(err) } - if want := `{"M":"ImZvbyI="}`; string(b) != want { + // Until Go 1.8, this generated `{"M":"ImZvbyI="}`. + // See https://github.com/golang/go/issues/14493#issuecomment-255857318 + if want := `{"M":"foo"}`; string(b) != want { t.Errorf("Marshal(x) = %#q; want %#q", b, want) } } @@ -717,3 +719,14 @@ func TestMarshalFloat(t *testing.T) { test(0, 32) test(math.Copysign(0, -1), 32) } + +func TestMarshalRawMessageValue(t *testing.T) { + const val = "\"some value\"" + b, err := Marshal(RawMessage(val)) + if err != nil { + t.Fatal(err) + } + if string(b) != val { + t.Errorf("got %q; want %q", b, val) + } +} diff --git a/src/encoding/json/stream.go b/src/encoding/json/stream.go index 87f0e57c6c..4c350fdd5e 100644 --- a/src/encoding/json/stream.go +++ b/src/encoding/json/stream.go @@ -246,9 +246,9 @@ func (enc *Encoder) SetEscapeHTML(on bool) { // be used to delay JSON decoding or precompute a JSON encoding. type RawMessage []byte -// MarshalJSON returns *m as the JSON encoding of m. -func (m *RawMessage) MarshalJSON() ([]byte, error) { - return *m, nil +// MarshalJSON returns m as the JSON encoding of m. +func (m RawMessage) MarshalJSON() ([]byte, error) { + return m, nil } // UnmarshalJSON sets *m to a copy of data.