Skip to content

Commit 82684f0

Browse files
authored
Merge pull request #22 from itchyny/fix-duplicate-keys
Fix crash bugs on duplicate keys
2 parents 3ada24a + 3dde5dc commit 82684f0

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

orderedmap.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,14 +213,19 @@ func decodeSlice(dec *json.Decoder, s []interface{}, escapeHTML bool) error {
213213
return err
214214
}
215215
s[index] = newMap
216+
} else if err = decodeOrderedMap(dec, &OrderedMap{}); err != nil {
217+
return err
216218
}
217219
} else if err = decodeOrderedMap(dec, &OrderedMap{}); err != nil {
218220
return err
219221
}
220222
case '[':
221223
if index < len(s) {
222-
values := s[index].([]interface{})
223-
if err = decodeSlice(dec, values, escapeHTML); err != nil {
224+
if values, ok := s[index].([]interface{}); ok {
225+
if err = decodeSlice(dec, values, escapeHTML); err != nil {
226+
return err
227+
}
228+
} else if err = decodeSlice(dec, []interface{}{}, escapeHTML); err != nil {
224229
return err
225230
}
226231
} else if err = decodeSlice(dec, []interface{}{}, escapeHTML); err != nil {

orderedmap_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,12 +333,14 @@ func TestUnmarshalJSONDuplicateKeys(t *testing.T) {
333333
"b": {"x":[1]},
334334
"c": "x",
335335
"d": {"x":1},
336+
"b": [{"x":[]}],
336337
"c": 1,
337338
"d": {"y": 2},
338339
"e": [{"x":1}],
340+
"e": [[]],
339341
"e": [{"z":2}],
340342
"a": {},
341-
"b": []
343+
"b": [[1]]
342344
}`
343345
o := New()
344346
err := json.Unmarshal([]byte(s), &o)

0 commit comments

Comments
 (0)