未验证 提交 e60ce6ce 编写于 作者: H Haojun Liao 提交者: GitHub

Merge pull request #19820 from taosdata/fix/TD-22253

fix:parse json error in schemaless
...@@ -256,7 +256,7 @@ int smlJsonParseObjFirst(char **start, SSmlLineInfo *element, int8_t *offset){ ...@@ -256,7 +256,7 @@ int smlJsonParseObjFirst(char **start, SSmlLineInfo *element, int8_t *offset){
if(unlikely(index >= OTD_JSON_FIELDS_NUM)) { if(unlikely(index >= OTD_JSON_FIELDS_NUM)) {
uError("index >= %d, %s", OTD_JSON_FIELDS_NUM, *start) uError("index >= %d, %s", OTD_JSON_FIELDS_NUM, *start)
break; return -1;
} }
char *sTmp = *start; char *sTmp = *start;
...@@ -275,6 +275,7 @@ int smlJsonParseObjFirst(char **start, SSmlLineInfo *element, int8_t *offset){ ...@@ -275,6 +275,7 @@ int smlJsonParseObjFirst(char **start, SSmlLineInfo *element, int8_t *offset){
} }
if(unlikely(isInQuote && *(*start) == '"')){ if(unlikely(isInQuote && *(*start) == '"')){
element->measureLen = (*start) - element->measure; element->measureLen = (*start) - element->measure;
(*start)++;
break; break;
} }
(*start)++; (*start)++;
...@@ -384,7 +385,7 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){ ...@@ -384,7 +385,7 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
if(unlikely(index >= OTD_JSON_FIELDS_NUM)) { if(unlikely(index >= OTD_JSON_FIELDS_NUM)) {
uError("index >= %d, %s", OTD_JSON_FIELDS_NUM, *start) uError("index >= %d, %s", OTD_JSON_FIELDS_NUM, *start)
break; return -1;
} }
if((*start)[1] == 'm'){ if((*start)[1] == 'm'){
...@@ -393,6 +394,7 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){ ...@@ -393,6 +394,7 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
while(*(*start)){ while(*(*start)){
if(unlikely(*(*start) == '"')){ if(unlikely(*(*start) == '"')){
element->measureLen = (*start) - element->measure; element->measureLen = (*start) - element->measure;
(*start)++;
break; break;
} }
(*start)++; (*start)++;
...@@ -406,15 +408,14 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){ ...@@ -406,15 +408,14 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
element->timestampLen = tmp - (*start); element->timestampLen = tmp - (*start);
*start = tmp; *start = tmp;
} }
continue; }else{
} while(*(*start)){
if(unlikely(*(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){
while(*(*start)){ element->timestampLen = (*start) - element->timestamp;
if(unlikely(*(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){ break;
element->timestampLen = (*start) - element->timestamp; }
break; (*start)++;
} }
(*start)++;
} }
}else if((*start)[1] == 'v'){ }else if((*start)[1] == 'v'){
(*start) += offset[index++]; (*start) += offset[index++];
...@@ -425,14 +426,14 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){ ...@@ -425,14 +426,14 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
element->colsLen = tmp - (*start); element->colsLen = tmp - (*start);
*start = tmp; *start = tmp;
} }
continue; }else{
} while(*(*start)){
while(*(*start)){ if(unlikely( *(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){
if(unlikely( *(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){ element->colsLen = (*start) - element->cols;
element->colsLen = (*start) - element->cols; break;
break; }
(*start)++;
} }
(*start)++;
} }
}else if((*start)[1] == 't' && (*start)[2] == 'a'){ }else if((*start)[1] == 't' && (*start)[2] == 'a'){
(*start) += offset[index++]; (*start) += offset[index++];
...@@ -442,7 +443,6 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){ ...@@ -442,7 +443,6 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
element->tagsLen = tmp - (*start); element->tagsLen = tmp - (*start);
*start = tmp; *start = tmp;
} }
continue;
} }
if(*(*start) == '}'){ if(*(*start) == '}'){
(*start)++; (*start)++;
...@@ -1259,6 +1259,7 @@ int32_t smlParseJSON(SSmlHandle *info, char *payload) { ...@@ -1259,6 +1259,7 @@ int32_t smlParseJSON(SSmlHandle *info, char *payload) {
if(info->dataFormat) { if(info->dataFormat) {
SSmlLineInfo element = {0}; SSmlLineInfo element = {0};
ret = smlParseJSONString(info, &dataPointStart, &element); ret = smlParseJSONString(info, &dataPointStart, &element);
if(element.measure == NULL) break;
}else{ }else{
if(cnt >= payloadNum){ if(cnt >= payloadNum){
payloadNum = payloadNum << 1; payloadNum = payloadNum << 1;
...@@ -1269,6 +1270,7 @@ int32_t smlParseJSON(SSmlHandle *info, char *payload) { ...@@ -1269,6 +1270,7 @@ int32_t smlParseJSON(SSmlHandle *info, char *payload) {
} }
} }
ret = smlParseJSONString(info, &dataPointStart, info->lines + cnt); ret = smlParseJSONString(info, &dataPointStart, info->lines + cnt);
if((info->lines + cnt)->measure == NULL) break;
} }
if (unlikely(ret != TSDB_CODE_SUCCESS)) { if (unlikely(ret != TSDB_CODE_SUCCESS)) {
uError("SML:0x%" PRIx64 " Invalid JSON Payload 1:%s", info->id, payload); uError("SML:0x%" PRIx64 " Invalid JSON Payload 1:%s", info->id, payload);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册