From a673f500b8de4c56216b41060973849328c2c519 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 2 Sep 2024 15:12:47 +0800 Subject: [PATCH 1/2] fix: free invalid mem --- source/libs/executor/src/executorInt.c | 1 + source/libs/executor/src/mergejoinoperator.c | 2 +- source/libs/function/src/builtinsimpl.c | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/source/libs/executor/src/executorInt.c b/source/libs/executor/src/executorInt.c index d09a83315a..92a7ecab83 100644 --- a/source/libs/executor/src/executorInt.c +++ b/source/libs/executor/src/executorInt.c @@ -371,6 +371,7 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int } if (hasPk && (j == pkParamIdx)) { pInput->pPrimaryKey = pInput->pData[j]; + QUERY_CHECK_CONDITION((pInput->pData[j]->pData != NULL), code, lino, _end, TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } QUERY_CHECK_CONDITION((pInput->pData[j] != NULL), code, lino, _end, TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) { diff --git a/source/libs/executor/src/mergejoinoperator.c b/source/libs/executor/src/mergejoinoperator.c index 14f3a08e17..30cc596a44 100644 --- a/source/libs/executor/src/mergejoinoperator.c +++ b/source/libs/executor/src/mergejoinoperator.c @@ -1919,10 +1919,10 @@ _return: if (pInfo != NULL) { destroyMergeJoinOperator(pInfo); } + destroyOperatorAndDownstreams(pOperator, pDownstream, oldNum); if (newDownstreams) { taosMemoryFree(pDownstream); } - destroyOperatorAndDownstreams(pOperator, pDownstream, oldNum); pTaskInfo->code = code; return code; diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index 6397b92191..e04ffaaeda 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -3163,6 +3163,10 @@ static int32_t doSaveLastrow(SqlFunctionCtx* pCtx, char* pData, int32_t rowIndex } if (pCtx->hasPrimaryKey) { + if (colDataIsNull_s(pkCol, rowIndex)) { + qError("primary key is null, rowIndex:%d", rowIndex); + return TSDB_CODE_FUNC_FUNTION_ERROR; + } char* pkData = colDataGetData(pkCol, rowIndex); if (IS_VAR_DATA_TYPE(pInfo->pkType)) { pInfo->pkBytes = varDataTLen(pkData); From 73fb43de2a7e929048e90001c14acbb351ec0722 Mon Sep 17 00:00:00 2001 From: facetosea <25808407@qq.com> Date: Wed, 4 Sep 2024 07:11:51 +0800 Subject: [PATCH 2/2] only for memLeak --- source/libs/executor/src/executorInt.c | 1 - source/libs/function/src/builtinsimpl.c | 4 ---- 2 files changed, 5 deletions(-) diff --git a/source/libs/executor/src/executorInt.c b/source/libs/executor/src/executorInt.c index 92a7ecab83..d09a83315a 100644 --- a/source/libs/executor/src/executorInt.c +++ b/source/libs/executor/src/executorInt.c @@ -371,7 +371,6 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int } if (hasPk && (j == pkParamIdx)) { pInput->pPrimaryKey = pInput->pData[j]; - QUERY_CHECK_CONDITION((pInput->pData[j]->pData != NULL), code, lino, _end, TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } QUERY_CHECK_CONDITION((pInput->pData[j] != NULL), code, lino, _end, TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) { diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index e04ffaaeda..6397b92191 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -3163,10 +3163,6 @@ static int32_t doSaveLastrow(SqlFunctionCtx* pCtx, char* pData, int32_t rowIndex } if (pCtx->hasPrimaryKey) { - if (colDataIsNull_s(pkCol, rowIndex)) { - qError("primary key is null, rowIndex:%d", rowIndex); - return TSDB_CODE_FUNC_FUNTION_ERROR; - } char* pkData = colDataGetData(pkCol, rowIndex); if (IS_VAR_DATA_TYPE(pInfo->pkType)) { pInfo->pkBytes = varDataTLen(pkData);