diff --git a/src/core/lib/json/json_reader.c b/src/core/lib/json/json_reader.c index 098e089eed4..9e18135b328 100644 --- a/src/core/lib/json/json_reader.c +++ b/src/core/lib/json/json_reader.c @@ -202,8 +202,10 @@ grpc_json_reader_status grpc_json_reader_run(grpc_json_reader *reader) { } if (reader->in_object) { reader->state = GRPC_JSON_STATE_OBJECT_KEY_BEGIN; - } else { + } else if (reader->in_array) { reader->state = GRPC_JSON_STATE_VALUE_BEGIN; + } else { + return GRPC_JSON_PARSE_ERROR; } } else { if (reader->depth-- == 0) return GRPC_JSON_PARSE_ERROR; diff --git a/test/core/json/json_test.c b/test/core/json/json_test.c index 735ff4c8532..7ea5caca5b1 100644 --- a/test/core/json/json_test.c +++ b/test/core/json/json_test.c @@ -90,6 +90,7 @@ static testing_pair testing_pairs[] = { {"{\"foo\": bar\"x\"}", NULL}, {"fals", NULL}, {"0,0 ", NULL}, + {"\"foo\",[]", NULL}, /* Testing unterminated string. */ {"\"\\x", NULL}, /* Testing invalid UTF-16 number. */