diff --git a/parser.go b/parser.go index d8df167..d358856 100644 --- a/parser.go +++ b/parser.go @@ -322,7 +322,7 @@ func searchKeys(data []byte, keys ...string) int { } case '[': // If we want to get array element by index - if keyLevel == level && keys[level][0] == '[' { + if keyLevel == level && len(keys[level]) > 0 && keys[level][0] == '[' { keyLen := len(keys[level]) // Note: keys[level][0] == '[' is guaranteed by the outer if-guard, // so the former middle term `keys[level][0] != '['` was always false diff --git a/parser_test.go b/parser_test.go index 795b470..ddcc531 100644 --- a/parser_test.go +++ b/parser_test.go @@ -1170,6 +1170,18 @@ var getArrayTests = []GetTest{ isFound: true, data: []string{`1`, `2`, `3`, `4`}, }, + { + desc: `array with single empty-string key returns not-found, not panic`, + json: `[]`, + path: []string{""}, + isFound: false, + }, + { + desc: `truncated array with empty key returns not-found, not panic`, + json: `[`, + path: []string{""}, + isFound: false, + }, { desc: `read array of objects`, json: `{"a": { "b":[{"x":1},{"x":2},{"x":3},{"x":4}]}}`,