fix: invalid free issue

This commit is contained in:
dapan1121 2023-01-09 11:33:26 +08:00
parent d70e32e7d3
commit 80586ad997
2 changed files with 9 additions and 4 deletions

View File

@ -573,6 +573,7 @@ struct STSDBRowIter {
struct SRowMerger {
STSchema *pTSchema;
int64_t version;
bool merged;
SArray *pArray; // SArray<SColVal>
};

View File

@ -776,10 +776,12 @@ _exit:
}
void tRowMergerClear(SRowMerger *pMerger) {
for (int32_t iCol = 1; iCol < pMerger->pTSchema->numOfCols; iCol++) {
SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol);
if (IS_VAR_DATA_TYPE(pTColVal->type)) {
tFree(pTColVal->value.pData);
if (pMerger->merged) {
for (int32_t iCol = 1; iCol < pMerger->pTSchema->numOfCols; iCol++) {
SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol);
if (IS_VAR_DATA_TYPE(pTColVal->type)) {
tFree(pTColVal->value.pData);
}
}
}
@ -801,6 +803,7 @@ int32_t tRowMerge(SRowMerger *pMerger, TSDBROW *pRow) {
if (IS_VAR_DATA_TYPE(pColVal->type)) {
SColVal *pTColVal = taosArrayGet(pMerger->pArray, iCol);
pTColVal->value.pData = NULL;
code = tRealloc(&pTColVal->value.pData, pColVal->value.nData);
if (code) goto _exit;
@ -821,6 +824,7 @@ int32_t tRowMerge(SRowMerger *pMerger, TSDBROW *pRow) {
}
pMerger->version = key.version;
pMerger->merged = true;
_exit:
return code;