Commit 1625da24 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

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 <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarQuentin Smith <quentin@golang.org>
parent 587b8032
pkg encoding/json, method (*RawMessage) MarshalJSON() ([]uint8, error)
pkg net, func ListenUnixgram(string, *UnixAddr) (*UDPConn, error) pkg net, func ListenUnixgram(string, *UnixAddr) (*UDPConn, error)
pkg syscall (darwin-386), func Fchflags(string, int) error pkg syscall (darwin-386), func Fchflags(string, int) error
pkg syscall (darwin-386-cgo), func Fchflags(string, int) error pkg syscall (darwin-386-cgo), func Fchflags(string, int) error
......
...@@ -440,7 +440,9 @@ func TestIssue6458(t *testing.T) { ...@@ -440,7 +440,9 @@ func TestIssue6458(t *testing.T) {
t.Fatal(err) 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) t.Errorf("Marshal(x) = %#q; want %#q", b, want)
} }
} }
...@@ -717,3 +719,14 @@ func TestMarshalFloat(t *testing.T) { ...@@ -717,3 +719,14 @@ func TestMarshalFloat(t *testing.T) {
test(0, 32) test(0, 32)
test(math.Copysign(0, -1), 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)
}
}
...@@ -246,9 +246,9 @@ func (enc *Encoder) SetEscapeHTML(on bool) { ...@@ -246,9 +246,9 @@ func (enc *Encoder) SetEscapeHTML(on bool) {
// be used to delay JSON decoding or precompute a JSON encoding. // be used to delay JSON decoding or precompute a JSON encoding.
type RawMessage []byte type RawMessage []byte
// MarshalJSON returns *m as the JSON encoding of m. // MarshalJSON returns m as the JSON encoding of m.
func (m *RawMessage) MarshalJSON() ([]byte, error) { func (m RawMessage) MarshalJSON() ([]byte, error) {
return *m, nil return m, nil
} }
// UnmarshalJSON sets *m to a copy of data. // UnmarshalJSON sets *m to a copy of data.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment