diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 24cff51d..eaf28fb6 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -698,8 +698,8 @@ void neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (g == NULL) { neu_resp_error_t error = { .error = NEU_ERR_GROUP_NOT_EXIST }; req->type = NEU_RESP_ERROR; - for (int i = 0; i < cmd->n_group; i++) { - free(cmd->groups[i].tags); + for (int x = 0; x < cmd->n_group; x++) { + free(cmd->groups[x].tags); } free(cmd->groups); driver->adapter.cb_funs.response(&driver->adapter, req, &error); diff --git a/src/parser/neu_json_rw.c b/src/parser/neu_json_rw.c index 1c120612..777df71b 100644 --- a/src/parser/neu_json_rw.c +++ b/src/parser/neu_json_rw.c @@ -641,6 +641,13 @@ static int decode_write_gtags_req_json(void * json_obj, ret = neu_json_decode_array_elem(g_elems[1].v.val_object, k, NEU_JSON_ELEM_SIZE(v_elems), v_elems); + if (ret != 0) { + for (int x = i; x >= 0; x--) { + free(req->groups[x].tags); + } + free(req->groups); + return -1; + } req->groups[i].tags[k].tag = v_elems[0].v.val_str; req->groups[i].tags[k].t = v_elems[1].t; req->groups[i].tags[k].value = v_elems[1].v;