diff options
| author | Erik Dubbelboer <erik@dubbelboer.com> | 2015-07-15 16:12:05 +0200 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2015-11-25 16:18:36 +0000 |
| commit | c4be790c0e20bfa4def3103392f404de201b3487 (patch) | |
| tree | 6fa960e0776631ddb57ffad75579f503478def35 /src/encoding/json/encode.go | |
| parent | 64cc5fd0b3ad20c6e7e8b875317629df8207d9ba (diff) | |
| download | go-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.go | 5 |
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 |
