aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcuiweixie <cuiweixie@gmail.com>2022-02-12 15:19:18 +0000
committerDaniel Martí <mvdan@mvdan.cc>2022-03-02 11:27:34 +0000
commit9f1239b90a7a48c5dc68a7eee08d8e1fba56db80 (patch)
treeb4c8dd3ed690401f2ad99b5c330b745bbd05bd0f /src
parent6da16b6ad5787a043fc9978d2d009934e3b2e165 (diff)
downloadgo-9f1239b90a7a48c5dc68a7eee08d8e1fba56db80.tar.xz
math/big: produce valid JSON in Int.MarshalJSON when nil
Fixes #50940. Change-Id: Ie2a0c4505ca9d7e448017d9d00a020a6b3996be3 GitHub-Last-Rev: afd8c6b5598f43de25831c700b8d76cd97571426 GitHub-Pull-Request: golang/go#50941 Reviewed-on: https://go-review.googlesource.com/c/go/+/381963 Trust: Cherry Mui <cherryyz@google.com> Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com> Trust: Emmanuel Odeke <emmanuel@orijtech.com> Run-TryBot: Emmanuel Odeke <emmanuel@orijtech.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Trust: Daniel Martí <mvdan@mvdan.cc>
Diffstat (limited to 'src')
-rw-r--r--src/math/big/intmarsh.go5
-rw-r--r--src/math/big/intmarsh_test.go14
2 files changed, 18 insertions, 1 deletions
diff --git a/src/math/big/intmarsh.go b/src/math/big/intmarsh.go
index c1422e2710..ce429ffc11 100644
--- a/src/math/big/intmarsh.go
+++ b/src/math/big/intmarsh.go
@@ -67,7 +67,10 @@ func (z *Int) UnmarshalText(text []byte) error {
// MarshalJSON implements the json.Marshaler interface.
func (x *Int) MarshalJSON() ([]byte, error) {
- return x.MarshalText()
+ if x == nil {
+ return []byte("null"), nil
+ }
+ return x.abs.itoa(x.neg, 10), nil
}
// UnmarshalJSON implements the json.Unmarshaler interface.
diff --git a/src/math/big/intmarsh_test.go b/src/math/big/intmarsh_test.go
index f82956ceaf..936669b380 100644
--- a/src/math/big/intmarsh_test.go
+++ b/src/math/big/intmarsh_test.go
@@ -97,6 +97,20 @@ func TestIntJSONEncoding(t *testing.T) {
}
}
+
+func TestIntJSONEncodingNil(t *testing.T) {
+ var x *Int
+ b, err := x.MarshalJSON()
+ if err != nil {
+ t.Fatalf("marshaling of nil failed: %s", err)
+ }
+ got := string(b)
+ want := "null"
+ if got != want {
+ t.Fatalf("marshaling of nil failed: got %s want %s", got, want)
+ }
+}
+
func TestIntXMLEncoding(t *testing.T) {
for _, test := range encodingTests {
for _, sign := range []string{"", "+", "-"} {