From 3e4b32bbe0eb3f5a571ecc79d6bd3415714fcde7 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Sun, 10 Oct 2021 21:42:15 +0800 Subject: [PATCH] [TD-10532]: schemaless line permits multiple whitespace delimiters --- src/client/src/tscParseLineProtocol.c | 15 ++++++++++++-- src/client/src/tscParseOpenTSDB.c | 30 +++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/client/src/tscParseLineProtocol.c b/src/client/src/tscParseLineProtocol.c index 6d2bd7a0b5..a515b6ca3c 100644 --- a/src/client/src/tscParseLineProtocol.c +++ b/src/client/src/tscParseLineProtocol.c @@ -1879,7 +1879,12 @@ static bool parseSmlValue(TAOS_SML_KV *pKV, const char **index, if ((*cur == ',' || *cur == ' ' || *cur == '\0') && *(cur - 1) != '\\') { //unescaped ' ' or '\0' indicates end of value *is_last_kv = (*cur == ' ' || *cur == '\0') ? true : false; - break; + if (*cur == ' ' && *(cur + 1) == ' ') { + cur++; + continue; + } else { + break; + } } //Escape special character if (*cur == '\\') { @@ -1937,7 +1942,13 @@ static int32_t parseSmlMeasurement(TAOS_SML_DATA_POINT *pSml, const char **index break; } if (*cur == ' ' && *(cur - 1) != '\\') { - break; + if (*(cur + 1) != ' ') { + break; + } + else { + cur++; + continue; + } } //Comma, Space, Backslash needs to be escaped if any if (*cur == '\\') { diff --git a/src/client/src/tscParseOpenTSDB.c b/src/client/src/tscParseOpenTSDB.c index e288243ffb..9904d8557f 100644 --- a/src/client/src/tscParseOpenTSDB.c +++ b/src/client/src/tscParseOpenTSDB.c @@ -55,7 +55,12 @@ static int32_t parseTelnetMetric(TAOS_SML_DATA_POINT *pSml, const char **index, } if (*cur == ' ') { - break; + if (*(cur + 1) != ' ') { + break; + } else { + cur++; + continue; + } } //convert dot to underscore for now, will be removed once dot is allowed in tbname. @@ -96,7 +101,12 @@ static int32_t parseTelnetTimeStamp(TAOS_SML_KV **pTS, int *num_kvs, const char while(*cur != '\0') { if (*cur == ' ') { - break; + if (*(cur + 1) != ' ') { + break; + } else { + cur++; + continue; + } } cur++; len++; @@ -140,7 +150,14 @@ static int32_t parseTelnetMetricValue(TAOS_SML_KV **pKVs, int *num_kvs, const ch while(*cur != '\0') { if (*cur == ' ') { - break; + if (*cur == ' ') { + if (*(cur + 1) != ' ') { + break; + } else { + cur++; + continue; + } + } } cur++; len++; @@ -224,7 +241,12 @@ static int32_t parseTelnetTagValue(TAOS_SML_KV *pKV, const char **index, if (*cur == ' ' || *cur == '\0') { // '\0' indicates end of value *is_last_kv = (*cur == '\0') ? true : false; - break; + if (*cur == ' ' && *(cur + 1) == ' ') { + cur++; + continue; + } else { + break; + } } cur++; len++; -- GitLab