提交 80586ad9 编写于 作者: D dapan1121

fix: invalid free issue

上级 d70e32e7
...@@ -573,6 +573,7 @@ struct STSDBRowIter { ...@@ -573,6 +573,7 @@ struct STSDBRowIter {
struct SRowMerger { struct SRowMerger {
STSchema *pTSchema; STSchema *pTSchema;
int64_t version; int64_t version;
bool merged;
SArray *pArray; // SArray<SColVal> SArray *pArray; // SArray<SColVal>
}; };
......
...@@ -776,10 +776,12 @@ _exit: ...@@ -776,10 +776,12 @@ _exit:
} }
void tRowMergerClear(SRowMerger *pMerger) { void tRowMergerClear(SRowMerger *pMerger) {
for (int32_t iCol = 1; iCol < pMerger->pTSchema->numOfCols; iCol++) { if (pMerger->merged) {
SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol); for (int32_t iCol = 1; iCol < pMerger->pTSchema->numOfCols; iCol++) {
if (IS_VAR_DATA_TYPE(pTColVal->type)) { SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol);
tFree(pTColVal->value.pData); if (IS_VAR_DATA_TYPE(pTColVal->type)) {
tFree(pTColVal->value.pData);
}
} }
} }
...@@ -801,6 +803,7 @@ int32_t tRowMerge(SRowMerger *pMerger, TSDBROW *pRow) { ...@@ -801,6 +803,7 @@ int32_t tRowMerge(SRowMerger *pMerger, TSDBROW *pRow) {
if (IS_VAR_DATA_TYPE(pColVal->type)) { if (IS_VAR_DATA_TYPE(pColVal->type)) {
SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol); SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol);
pTColVal->value.pData = NULL;
code = tRealloc(&pTColVal->value.pData, pColVal->value.nData); code = tRealloc(&pTColVal->value.pData, pColVal->value.nData);
if (code) goto _exit; if (code) goto _exit;
...@@ -821,6 +824,7 @@ int32_t tRowMerge(SRowMerger *pMerger, TSDBROW *pRow) { ...@@ -821,6 +824,7 @@ int32_t tRowMerge(SRowMerger *pMerger, TSDBROW *pRow) {
} }
pMerger->version = key.version; pMerger->version = key.version;
pMerger->merged = true;
_exit: _exit:
return code; return code;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册