fix invalid free
This commit is contained in:
parent
44e6d225e2
commit
d85ae3c26e
|
@ -146,8 +146,8 @@ int32_t tTABLEIDCmprFn(const void *p1, const void *p2);
|
|||
#define MIN_TSDBKEY(KEY1, KEY2) ((tsdbKeyCmprFn(&(KEY1), &(KEY2)) < 0) ? (KEY1) : (KEY2))
|
||||
#define MAX_TSDBKEY(KEY1, KEY2) ((tsdbKeyCmprFn(&(KEY1), &(KEY2)) > 0) ? (KEY1) : (KEY2))
|
||||
// SBlockCol
|
||||
int32_t tPutBlockCol(SBuffer *buffer, const SBlockCol *pBlockCol, int32_t ver);
|
||||
int32_t tGetBlockCol(SBufferReader *br, SBlockCol *pBlockCol, int32_t ver);
|
||||
int32_t tPutBlockCol(SBuffer *buffer, const SBlockCol *pBlockCol, int32_t ver, uint32_t cmprAlg);
|
||||
int32_t tGetBlockCol(SBufferReader *br, SBlockCol *pBlockCol, int32_t ver, uint32_t cmprAlg);
|
||||
int32_t tBlockColCmprFn(const void *p1, const void *p2);
|
||||
// SDataBlk
|
||||
void tDataBlkReset(SDataBlk *pBlock);
|
||||
|
|
|
@ -363,7 +363,7 @@ int32_t tsdbDataFileReadBlockDataByColumn(SDataFileReader *reader, const SBrinRe
|
|||
break;
|
||||
}
|
||||
|
||||
code = tGetBlockCol(&br, &blockCol, hdr.fmtVer);
|
||||
code = tGetBlockCol(&br, &blockCol, hdr.fmtVer, hdr.cmprAlg);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
}
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ int32_t tsdbSttFileReadBlockDataByColumn(SSttFileReader *reader, const SSttBlk *
|
|||
break;
|
||||
}
|
||||
|
||||
code = tGetBlockCol(&br, &blockCol, hdr.fmtVer);
|
||||
code = tGetBlockCol(&br, &blockCol, hdr.fmtVer, hdr.cmprAlg);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
}
|
||||
|
||||
|
|
|
@ -388,9 +388,9 @@ int32_t tGetSttBlk(uint8_t *p, void *ph) {
|
|||
|
||||
// SBlockCol ======================================================
|
||||
|
||||
static const int32_t BLOCK_WITH_ALG_VER = 1;
|
||||
static const int32_t BLOCK_WITH_ALG_VER = 2;
|
||||
|
||||
int32_t tPutBlockCol(SBuffer *buffer, const SBlockCol *pBlockCol, int32_t ver) {
|
||||
int32_t tPutBlockCol(SBuffer *buffer, const SBlockCol *pBlockCol, int32_t ver, uint32_t defaultCmprAlg) {
|
||||
int32_t code;
|
||||
|
||||
ASSERT(pBlockCol->flag && (pBlockCol->flag != HAS_NONE));
|
||||
|
@ -418,11 +418,13 @@ int32_t tPutBlockCol(SBuffer *buffer, const SBlockCol *pBlockCol, int32_t ver) {
|
|||
}
|
||||
if (ver >= BLOCK_WITH_ALG_VER) {
|
||||
if ((code = tBufferPutU32(buffer, pBlockCol->alg))) return code;
|
||||
} else {
|
||||
if ((code = tBufferPutU32(buffer, defaultCmprAlg))) return code;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t tGetBlockCol(SBufferReader *br, SBlockCol *pBlockCol, int32_t ver) {
|
||||
int32_t tGetBlockCol(SBufferReader *br, SBlockCol *pBlockCol, int32_t ver, uint32_t defaultCmprAlg) {
|
||||
int32_t code;
|
||||
|
||||
if ((code = tBufferGetI16v(br, &pBlockCol->cid))) return code;
|
||||
|
@ -456,6 +458,8 @@ int32_t tGetBlockCol(SBufferReader *br, SBlockCol *pBlockCol, int32_t ver) {
|
|||
|
||||
if (ver >= BLOCK_WITH_ALG_VER) {
|
||||
if ((code = tBufferGetU32(br, &pBlockCol->alg))) return code;
|
||||
} else {
|
||||
pBlockCol->alg = defaultCmprAlg;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1421,7 +1425,7 @@ int32_t tBlockDataCompress(SBlockData *bData, void *pCompr, SBuffer *buffers, SB
|
|||
|
||||
SDiskDataHdr hdr = {
|
||||
.delimiter = TSDB_FILE_DLMT,
|
||||
.fmtVer = 1,
|
||||
.fmtVer = 2,
|
||||
.suid = bData->suid,
|
||||
.uid = bData->uid,
|
||||
.szUid = 0, // filled by compress key
|
||||
|
@ -1474,7 +1478,7 @@ int32_t tBlockDataCompress(SBlockData *bData, void *pCompr, SBuffer *buffers, SB
|
|||
.offset = offset,
|
||||
.alg = cinfo.cmprAlg};
|
||||
|
||||
code = tPutBlockCol(&buffers[2], &blockCol, hdr.fmtVer);
|
||||
code = tPutBlockCol(&buffers[2], &blockCol, hdr.fmtVer, hdr.cmprAlg);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
}
|
||||
hdr.szBlkCol = buffers[2].size;
|
||||
|
@ -1513,7 +1517,8 @@ int32_t tBlockDataDecompress(SBufferReader *br, SBlockData *blockData, SBuffer *
|
|||
for (uint32_t startOffset = br2.offset; br2.offset - startOffset < hdr.szBlkCol;) {
|
||||
SBlockCol blockCol;
|
||||
|
||||
code = tGetBlockCol(&br2, &blockCol, hdr.fmtVer);
|
||||
code = tGetBlockCol(&br2, &blockCol, hdr.fmtVer, hdr.cmprAlg);
|
||||
if (blockCol.alg == 0) blockCol.alg = hdr.cmprAlg;
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
code = tBlockDataDecompressColData(&hdr, &blockCol, br, blockData, assist);
|
||||
TSDB_CHECK_CODE(code, lino, _exit);
|
||||
|
@ -1536,17 +1541,17 @@ int32_t tPutDiskDataHdr(SBuffer *buffer, const SDiskDataHdr *pHdr) {
|
|||
if ((code = tBufferPutI32v(buffer, pHdr->szKey))) return code;
|
||||
if ((code = tBufferPutI32v(buffer, pHdr->szBlkCol))) return code;
|
||||
if ((code = tBufferPutI32v(buffer, pHdr->nRow))) return code;
|
||||
if (pHdr->fmtVer < 1) {
|
||||
if (pHdr->fmtVer < 2) {
|
||||
if ((code = tBufferPutI8(buffer, pHdr->cmprAlg))) return code;
|
||||
} else if (pHdr->fmtVer == 1) {
|
||||
} else if (pHdr->fmtVer == 2) {
|
||||
if ((code = tBufferPutU32(buffer, pHdr->cmprAlg))) return code;
|
||||
} else {
|
||||
// more data fmt ver
|
||||
}
|
||||
if (pHdr->fmtVer == 1) {
|
||||
if (pHdr->fmtVer >= 1) {
|
||||
if ((code = tBufferPutI8(buffer, pHdr->numOfPKs))) return code;
|
||||
for (int i = 0; i < pHdr->numOfPKs; i++) {
|
||||
if ((code = tPutBlockCol(buffer, &pHdr->primaryBlockCols[i], pHdr->fmtVer))) return code;
|
||||
if ((code = tPutBlockCol(buffer, &pHdr->primaryBlockCols[i], pHdr->fmtVer, pHdr->cmprAlg))) return code;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1565,19 +1570,21 @@ int32_t tGetDiskDataHdr(SBufferReader *br, SDiskDataHdr *pHdr) {
|
|||
if ((code = tBufferGetI32v(br, &pHdr->szKey))) return code;
|
||||
if ((code = tBufferGetI32v(br, &pHdr->szBlkCol))) return code;
|
||||
if ((code = tBufferGetI32v(br, &pHdr->nRow))) return code;
|
||||
if (pHdr->fmtVer < 1) {
|
||||
if (pHdr->fmtVer < 2) {
|
||||
int8_t cmprAlg = 0;
|
||||
if ((code = tBufferGetI8(br, &cmprAlg))) return code;
|
||||
pHdr->cmprAlg = cmprAlg;
|
||||
} else if (pHdr->fmtVer == 1) {
|
||||
} else if (pHdr->fmtVer == 2) {
|
||||
if ((code = tBufferGetU32(br, &pHdr->cmprAlg))) return code;
|
||||
} else {
|
||||
// more data fmt ver
|
||||
}
|
||||
if (pHdr->fmtVer == 1) {
|
||||
if (pHdr->fmtVer >= 1) {
|
||||
if ((code = tBufferGetI8(br, &pHdr->numOfPKs))) return code;
|
||||
for (int i = 0; i < pHdr->numOfPKs; i++) {
|
||||
if ((code = tGetBlockCol(br, &pHdr->primaryBlockCols[i], pHdr->fmtVer))) return code;
|
||||
if ((code = tGetBlockCol(br, &pHdr->primaryBlockCols[i], pHdr->fmtVer, pHdr->cmprAlg))) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pHdr->numOfPKs = 0;
|
||||
|
|
Loading…
Reference in New Issue