Merge pull request #27140 from taosdata/fix/3.0/TD-31351
fix:[TD-31351] avoid double free.
This commit is contained in:
commit
d015406208
|
@ -1066,7 +1066,8 @@ int32_t filterAddField(SFilterInfo *info, void *desc, void **data, int32_t type,
|
||||||
info->fields[type].fields =
|
info->fields[type].fields =
|
||||||
taosMemoryRealloc(info->fields[type].fields, info->fields[type].size * sizeof(SFilterField));
|
taosMemoryRealloc(info->fields[type].fields, info->fields[type].size * sizeof(SFilterField));
|
||||||
if (info->fields[type].fields == NULL) {
|
if (info->fields[type].fields == NULL) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
fltError("taosMemoryRealloc failed, size:%d", (int32_t)(info->fields[type].size * sizeof(SFilterField)));
|
||||||
|
FLT_ERR_RET(terrno);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1086,14 +1087,20 @@ int32_t filterAddField(SFilterInfo *info, void *desc, void **data, int32_t type,
|
||||||
taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, false);
|
taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, false);
|
||||||
if (NULL == info->pctx.valHash) {
|
if (NULL == info->pctx.valHash) {
|
||||||
fltError("taosHashInit failed, size:%d", FILTER_DEFAULT_GROUP_SIZE * FILTER_DEFAULT_VALUE_SIZE);
|
fltError("taosHashInit failed, size:%d", FILTER_DEFAULT_GROUP_SIZE * FILTER_DEFAULT_VALUE_SIZE);
|
||||||
FLT_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
|
if (srcFlag) {
|
||||||
|
FILTER_SET_FLAG(*srcFlag, FLD_DATA_NO_FREE);
|
||||||
|
}
|
||||||
|
FLT_ERR_RET(terrno);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SFilterDataInfo dInfo = {idx, *data};
|
SFilterDataInfo dInfo = {idx, *data};
|
||||||
if (taosHashPut(info->pctx.valHash, *data, dataLen, &dInfo, sizeof(dInfo))) {
|
if (taosHashPut(info->pctx.valHash, *data, dataLen, &dInfo, sizeof(dInfo))) {
|
||||||
fltError("taosHashPut to set failed");
|
fltError("taosHashPut to set failed");
|
||||||
FLT_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
|
if (srcFlag) {
|
||||||
|
FILTER_SET_FLAG(*srcFlag, FLD_DATA_NO_FREE);
|
||||||
|
}
|
||||||
|
FLT_ERR_RET(terrno);
|
||||||
}
|
}
|
||||||
if (srcFlag) {
|
if (srcFlag) {
|
||||||
FILTER_SET_FLAG(*srcFlag, FLD_DATA_NO_FREE);
|
FILTER_SET_FLAG(*srcFlag, FLD_DATA_NO_FREE);
|
||||||
|
@ -1102,7 +1109,7 @@ int32_t filterAddField(SFilterInfo *info, void *desc, void **data, int32_t type,
|
||||||
} else if (type != FLD_TYPE_COLUMN && data) {
|
} else if (type != FLD_TYPE_COLUMN && data) {
|
||||||
if (freeIfExists) {
|
if (freeIfExists) {
|
||||||
taosMemoryFreeClear(*data);
|
taosMemoryFreeClear(*data);
|
||||||
} else if (sameBuf) {
|
} else if (sameBuf && srcFlag) {
|
||||||
FILTER_SET_FLAG(*srcFlag, FLD_DATA_NO_FREE);
|
FILTER_SET_FLAG(*srcFlag, FLD_DATA_NO_FREE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1114,11 +1121,11 @@ int32_t filterAddField(SFilterInfo *info, void *desc, void **data, int32_t type,
|
||||||
}
|
}
|
||||||
|
|
||||||
static FORCE_INLINE int32_t filterAddColFieldFromField(SFilterInfo *info, SFilterField *field, SFilterFieldId *fid) {
|
static FORCE_INLINE int32_t filterAddColFieldFromField(SFilterInfo *info, SFilterField *field, SFilterFieldId *fid) {
|
||||||
FLT_ERR_RET(filterAddField(info, field->desc, &field->data, FILTER_GET_TYPE(field->flag), fid, 0, false, NULL));
|
int32_t code = filterAddField(info, field->desc, &field->data, FILTER_GET_TYPE(field->flag), fid, 0, false, NULL);
|
||||||
|
|
||||||
FILTER_SET_FLAG(field->flag, FLD_DATA_NO_FREE);
|
FILTER_SET_FLAG(field->flag, FLD_DATA_NO_FREE);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t filterAddFieldFromNode(SFilterInfo *info, SNode *node, SFilterFieldId *fid) {
|
int32_t filterAddFieldFromNode(SFilterInfo *info, SNode *node, SFilterFieldId *fid) {
|
||||||
|
@ -2855,10 +2862,9 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx **gRes, int32_t gResNum
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FLT_ERR_JRET(filterConvertGroupFromArray(info, group));
|
||||||
|
|
||||||
_return:
|
_return:
|
||||||
FLT_ERR_RET(filterConvertGroupFromArray(info, group));
|
|
||||||
|
|
||||||
taosArrayDestroy(group);
|
taosArrayDestroy(group);
|
||||||
|
|
||||||
filterFreeInfo(&oinfo);
|
filterFreeInfo(&oinfo);
|
||||||
|
|
Loading…
Reference in New Issue