提交 bac3766f 编写于 作者: G Ganlin Zhao

[TD-5208]<fix>:fix potential mem leak when parsing value failed

上级 c5e02db6
...@@ -1371,7 +1371,7 @@ static bool convertSmlValueType(TAOS_SML_KV *pVal, char *value, ...@@ -1371,7 +1371,7 @@ static bool convertSmlValueType(TAOS_SML_KV *pVal, char *value,
memcpy(pVal->value, &val, pVal->length); memcpy(pVal->value, &val, pVal->length);
return true; return true;
} }
return false; return false;
} }
static int32_t getTimeStampValue(char *value, uint16_t len, static int32_t getTimeStampValue(char *value, uint16_t len,
...@@ -1460,7 +1460,7 @@ static int32_t parseSmlTimeStamp(TAOS_SML_KV **pTS, const char **index) { ...@@ -1460,7 +1460,7 @@ static int32_t parseSmlTimeStamp(TAOS_SML_KV **pTS, const char **index) {
} }
if (len > 0) { if (len > 0) {
value = calloc(len+1, 1); value = calloc(len + 1, 1);
memcpy(value, start, len); memcpy(value, start, len);
} }
...@@ -1541,13 +1541,6 @@ static bool parseSmlValue(TAOS_SML_KV *pKV, const char **index, ...@@ -1541,13 +1541,6 @@ static bool parseSmlValue(TAOS_SML_KV *pKV, const char **index,
while (1) { while (1) {
// unescaped ',' or ' ' or '\0' identifies a value // unescaped ',' or ' ' or '\0' identifies a value
if ((*cur == ',' || *cur == ' ' || *cur == '\0') && *(cur - 1) != '\\') { if ((*cur == ',' || *cur == ' ' || *cur == '\0') && *(cur - 1) != '\\') {
value = calloc(len + 1, 1);
memcpy(value, start, len);
value[len] = '\0';
if (!convertSmlValueType(pKV, value, len)) {
free(value);
return TSDB_CODE_TSC_LINE_SYNTAX_ERROR;
}
//unescaped ' ' or '\0' indicates end of value //unescaped ' ' or '\0' indicates end of value
*is_last_kv = (*cur == ' ' || *cur == '\0') ? true : false; *is_last_kv = (*cur == ' ' || *cur == '\0') ? true : false;
break; break;
...@@ -1560,9 +1553,16 @@ static bool parseSmlValue(TAOS_SML_KV *pKV, const char **index, ...@@ -1560,9 +1553,16 @@ static bool parseSmlValue(TAOS_SML_KV *pKV, const char **index,
len++; len++;
} }
if (value) { value = calloc(len + 1, 1);
memcpy(value, start, len);
value[len] = '\0';
if (!convertSmlValueType(pKV, value, len)) {
//free previous alocated key field
free(pKV->key);
free(value); free(value);
return TSDB_CODE_TSC_LINE_SYNTAX_ERROR;
} }
free(value);
*index = (*cur == '\0') ? cur : cur + 1; *index = (*cur == '\0') ? cur : cur + 1;
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册