aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/json
diff options
context:
space:
mode:
authorGravatar Nicolas Noble <nicolasnoble@users.noreply.github.com>2016-03-31 20:51:30 -0700
committerGravatar Nicolas Noble <nicolasnoble@users.noreply.github.com>2016-03-31 20:51:30 -0700
commit7661da5b417130262ded988b2f881ab619d3b244 (patch)
treef1352eb0330865fc6fdd306a2cfd6dc0a86adb73 /src/core/lib/json
parentd0fbba52d6e379b76a69016bc264b96a2318315f (diff)
parent959b6f52cda3555a92e8a7c52f213560960ce614 (diff)
Merge pull request #6012 from nicolasnoble/memleak_detector
Adding memory leak detections for the json fuzzer.
Diffstat (limited to 'src/core/lib/json')
-rw-r--r--src/core/lib/json/json_reader.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/core/lib/json/json_reader.c b/src/core/lib/json/json_reader.c
index d09cee54f2..bc04bccc65 100644
--- a/src/core/lib/json/json_reader.c
+++ b/src/core/lib/json/json_reader.c
@@ -180,6 +180,13 @@ grpc_json_reader_status grpc_json_reader_run(grpc_json_reader *reader) {
case GRPC_JSON_STATE_VALUE_NUMBER_WITH_DECIMAL:
case GRPC_JSON_STATE_VALUE_NUMBER_ZERO:
case GRPC_JSON_STATE_VALUE_NUMBER_EPM:
+ if (reader->depth == 0) {
+ return GRPC_JSON_PARSE_ERROR;
+ } else if ((c == '}') && !reader->in_object) {
+ return GRPC_JSON_PARSE_ERROR;
+ } else if ((c == ']') && !reader->in_array) {
+ return GRPC_JSON_PARSE_ERROR;
+ }
success = (uint32_t)json_reader_set_number(reader);
if (!success) return GRPC_JSON_PARSE_ERROR;
json_reader_string_clear(reader);
@@ -195,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;