diff options
author | Robert Griesemer <gri@golang.org> | 2014-10-01 16:24:17 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2014-10-01 16:24:17 -0700 |
commit | 1e04c88a8f5749e619fa8f429f840498da297ed9 (patch) | |
tree | e11d1a00f2aa6a0bc9470668722ce3dd8bb1b63a /src/encoding/json/decode.go | |
parent | caed88cb1883491028f889e844751c4a8ebb461d (diff) | |
download | go-1e04c88a8f5749e619fa8f429f840498da297ed9.tar.gz |
encoding/json: don't panic on incorrect map argument
Fixes issue 8305.
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/145680044
Diffstat (limited to 'src/encoding/json/decode.go')
-rw-r--r-- | src/encoding/json/decode.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/encoding/json/decode.go b/src/encoding/json/decode.go index af1c908ad..67ec37388 100644 --- a/src/encoding/json/decode.go +++ b/src/encoding/json/decode.go @@ -445,7 +445,7 @@ func (d *decodeState) array(v reflect.Value) { } // object consumes an object from d.data[d.off-1:], decoding into the value v. -// the first byte of the object ('{') has been read already. +// the first byte ('{') of the object has been read already. func (d *decodeState) object(v reflect.Value) { // Check for unmarshaler. u, ut, pv := d.indirect(v, false) @@ -478,7 +478,9 @@ func (d *decodeState) object(v reflect.Value) { t := v.Type() if t.Key().Kind() != reflect.String { d.saveError(&UnmarshalTypeError{"object", v.Type()}) - break + d.off-- + d.next() // skip over { } in input + return } if v.IsNil() { v.Set(reflect.MakeMap(t)) |