summaryrefslogtreecommitdiff
path: root/src/encoding/json/decode.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2014-10-01 16:24:17 -0700
committerRobert Griesemer <gri@golang.org>2014-10-01 16:24:17 -0700
commit1e04c88a8f5749e619fa8f429f840498da297ed9 (patch)
treee11d1a00f2aa6a0bc9470668722ce3dd8bb1b63a /src/encoding/json/decode.go
parentcaed88cb1883491028f889e844751c4a8ebb461d (diff)
downloadgo-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.go6
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))