From 3964f017936d384832aa7a9c9738ccb3f0b0df29 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Mon, 18 Mar 2024 07:23:55 +0000 Subject: [PATCH] fix invalid read --- source/common/src/tdataformat.c | 15 --------------- source/dnode/mnode/impl/src/mndStb.c | 3 ++- source/dnode/vnode/src/tsdb/tsdbUtil.c | 2 ++ source/libs/qcom/src/queryUtil.c | 11 ++++++----- source/libs/qcom/src/querymsg.c | 2 +- 5 files changed, 11 insertions(+), 22 deletions(-) diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index 664d954cc8..af4d404aa0 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -4273,14 +4273,6 @@ int32_t tCompressData(void *input, // input if (buffer == NULL) { buffer = &local; } - - // if (info->cmprAlg == TWO_STAGE_COMP) { - // code = tBufferEnsureCapacity(buffer, extraSizeNeeded); - // if (code) { - // tBufferDestroy(&local); - // return code; - // } - // } code = tBufferEnsureCapacity(buffer, extraSizeNeeded); info->compressedSize = tDataCompress[info->dataType].compFunc( // @@ -4358,13 +4350,6 @@ int32_t tDecompressData(void *input, // input if (buffer == NULL) { buffer = &local; } - // if (info->cmprAlg == TWO_STAGE_COMP) { - // code = tBufferEnsureCapacity(buffer, info->originalSize + COMP_OVERFLOW_BYTES); - // if (code) { - // tBufferDestroy(&local); - // return code; - // } - // } code = tBufferEnsureCapacity(buffer, info->originalSize + COMP_OVERFLOW_BYTES); int32_t decompressedSize = tDataCompress[info->dataType].decompFunc( diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index 53aa59f1e0..bb57880a41 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -501,7 +501,8 @@ void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pStb, int3 SColCmprWrapper *pCmpr = &req.colCmpr; pCmpr->version = pStb->colVer; pCmpr->nCols = pStb->numOfColumns; - req.colCmpr.pColCmpr = taosMemoryCalloc(1, sizeof(SColCmpr)); + + req.colCmpr.pColCmpr = taosMemoryCalloc(pCmpr->nCols, sizeof(SColCmpr)); for (int32_t i = 0; i < pStb->numOfColumns; i++) { SColCmpr *p = &pCmpr->pColCmpr[i]; p->alg = pStb->pCmpr[i].cmprAlg; diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index f34a9dbd3e..7f1995129e 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -1625,6 +1625,8 @@ static int32_t tBlockDataCompressKeyPart(SBlockData *bData, SDiskDataHdr *hdr, S .dataType = TSDB_DATA_TYPE_TIMESTAMP, .originalSize = sizeof(TSKEY) * bData->nRow, }; + // tsdbGetColCmprAlgFromSet(compressInfo->pColCmpr, 1, &cinfo.cmprAlg); + code = tCompressDataToBuffer((uint8_t *)bData->aTSKEY, &cinfo, buffer, assist); TSDB_CHECK_CODE(code, lino, _exit); hdr->szKey = cinfo.compressedSize; diff --git a/source/libs/qcom/src/queryUtil.c b/source/libs/qcom/src/queryUtil.c index 78d8f11af4..a5e1a73db7 100644 --- a/source/libs/qcom/src/queryUtil.c +++ b/source/libs/qcom/src/queryUtil.c @@ -300,14 +300,14 @@ int32_t dataConverToStr(char* str, int type, void* buf, int32_t bufSize, int32_t n = sprintf(str, "%e", GET_DOUBLE_VAL(buf)); break; - case TSDB_DATA_TYPE_VARBINARY:{ + case TSDB_DATA_TYPE_VARBINARY: { if (bufSize < 0) { // tscError("invalid buf size"); return TSDB_CODE_TSC_INVALID_VALUE; } - void* data = NULL; + void* data = NULL; uint32_t size = 0; - if(taosAscii2Hex(buf, bufSize, &data, &size) < 0){ + if (taosAscii2Hex(buf, bufSize, &data, &size) < 0) { return TSDB_CODE_OUT_OF_MEMORY; } *str = '"'; @@ -475,6 +475,8 @@ int32_t cloneTableMeta(STableMeta* pSrc, STableMeta** pDst) { if (useCompress(pSrc->tableType)) { (*pDst)->schemaExt = (SSchemaExt*)((char*)*pDst + metaSize); memcpy((*pDst)->schemaExt, pSrc->schemaExt, schemaExtSize); + } else { + (*pDst)->schemaExt = NULL; } return TSDB_CODE_SUCCESS; @@ -592,10 +594,9 @@ int32_t cloneSVreateTbReq(SVCreateTbReq* pSrc, SVCreateTbReq** pDst) { return TSDB_CODE_SUCCESS; } -void freeDbCfgInfo(SDbCfgInfo *pInfo) { +void freeDbCfgInfo(SDbCfgInfo* pInfo) { if (pInfo) { taosArrayDestroy(pInfo->pRetensions); } taosMemoryFree(pInfo); } - diff --git a/source/libs/qcom/src/querymsg.c b/source/libs/qcom/src/querymsg.c index 9708313f9f..faf97a7c39 100644 --- a/source/libs/qcom/src/querymsg.c +++ b/source/libs/qcom/src/querymsg.c @@ -402,7 +402,7 @@ int32_t queryCreateCTableMetaFromMsg(STableMetaRsp *msg, SCTableMeta *pMeta) { int32_t queryCreateTableMetaFromMsg(STableMetaRsp *msg, bool isStb, STableMeta **pMeta) { int32_t total = msg->numOfColumns + msg->numOfTags; int32_t metaSize = sizeof(STableMeta) + sizeof(SSchema) * total; - int32_t schemaExtSize = sizeof(SSchemaExt) * msg->numOfColumns; + int32_t schemaExtSize = useCompress(msg->tableType) ? sizeof(SSchemaExt) * msg->numOfColumns : 0; STableMeta *pTableMeta = taosMemoryCalloc(1, metaSize + schemaExtSize); if (NULL == pTableMeta) {