diff --git a/parser.go b/parser.go index 513125f..2da0323 100644 --- a/parser.go +++ b/parser.go @@ -98,9 +98,15 @@ func findKeyStart(data []byte, key string) (int, error) { } case '[': - i = blockEnd(data[i:], data[i], ']') + i + end := blockEnd(data[i:], data[i], ']') + if end != -1 { + i = i + end + } case '{': - i = blockEnd(data[i:], data[i], '}') + i + end := blockEnd(data[i:], data[i], '}') + if end != -1 { + i = i + end + } } i++ } diff --git a/parser_test.go b/parser_test.go index 18045f1..40685cf 100644 --- a/parser_test.go +++ b/parser_test.go @@ -185,6 +185,18 @@ var deleteTests = []DeleteTest{ path: []string{"b"}, data: `{"a": "1" , "c": 3}`, }, + { + desc: "Issue #188: infinite loop in Delete", + json: `^_�^C^A^@[`, + path: []string{""}, + data: `^_�^C^A^@[`, + }, + { + desc: "Issue #188: infinite loop in Delete", + json: `^_�^C^A^@{`, + path: []string{""}, + data: `^_�^C^A^@{`, + }, } var setTests = []SetTest{