From bac3766fab2c2c2b82c9a8cc50b90c50c5ad4610 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Mon, 19 Jul 2021 10:12:02 +0800 Subject: [PATCH] [TD-5208]:fix potential mem leak when parsing value failed --- src/client/src/tscParseLineProtocol.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/client/src/tscParseLineProtocol.c b/src/client/src/tscParseLineProtocol.c index 581ad1a03c..ca277ed74a 100644 --- a/src/client/src/tscParseLineProtocol.c +++ b/src/client/src/tscParseLineProtocol.c @@ -1371,7 +1371,7 @@ static bool convertSmlValueType(TAOS_SML_KV *pVal, char *value, memcpy(pVal->value, &val, pVal->length); return true; } - return false; + return false; } static int32_t getTimeStampValue(char *value, uint16_t len, @@ -1460,7 +1460,7 @@ static int32_t parseSmlTimeStamp(TAOS_SML_KV **pTS, const char **index) { } if (len > 0) { - value = calloc(len+1, 1); + value = calloc(len + 1, 1); memcpy(value, start, len); } @@ -1541,13 +1541,6 @@ static bool parseSmlValue(TAOS_SML_KV *pKV, const char **index, while (1) { // unescaped ',' or ' ' or '\0' identifies a value 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 *is_last_kv = (*cur == ' ' || *cur == '\0') ? true : false; break; @@ -1560,9 +1553,16 @@ static bool parseSmlValue(TAOS_SML_KV *pKV, const char **index, 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); + return TSDB_CODE_TSC_LINE_SYNTAX_ERROR; } + free(value); *index = (*cur == '\0') ? cur : cur + 1; return TSDB_CODE_SUCCESS; -- GitLab