aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/json/encode.go
diff options
context:
space:
mode:
authorErik Dubbelboer <erik@dubbelboer.com>2015-07-15 16:12:05 +0200
committerRuss Cox <rsc@golang.org>2015-11-25 16:18:36 +0000
commitc4be790c0e20bfa4def3103392f404de201b3487 (patch)
tree6fa960e0776631ddb57ffad75579f503478def35 /src/encoding/json/encode.go
parent64cc5fd0b3ad20c6e7e8b875317629df8207d9ba (diff)
downloadgo-c4be790c0e20bfa4def3103392f404de201b3487.tar.xz
encoding/json: check if Number is valid
json.Number is a special case which didn't have any checks and could result in invalid JSON. Fixes #10281 Change-Id: Ie3e726e4d6bf6a6aba535d36f6107013ceac913a Reviewed-on: https://go-review.googlesource.com/12250 Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/encoding/json/encode.go')
-rw-r--r--src/encoding/json/encode.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go
index 6af2fabeb4..364e2724b7 100644
--- a/src/encoding/json/encode.go
+++ b/src/encoding/json/encode.go
@@ -14,6 +14,7 @@ import (
"bytes"
"encoding"
"encoding/base64"
+ "fmt"
"math"
"reflect"
"runtime"
@@ -529,8 +530,12 @@ var (
func stringEncoder(e *encodeState, v reflect.Value, quoted bool) {
if v.Type() == numberType {
numStr := v.String()
+ // In Go1.5 the empty string encodes to "0", while this is not a valid number literal
+ // we keep compatibility so check validity after this.
if numStr == "" {
numStr = "0" // Number's zero-val
+ } else if !Number(numStr).IsValid() {
+ e.error(fmt.Errorf("json: invalid number literal, trying to marshal %s", v.String()))
}
e.WriteString(numStr)
return