Merge pull request #22595 from taosdata/fix/TS-3873
enhance: fix buffer size overflow
This commit is contained in:
commit
2566e6974d
|
@ -654,9 +654,12 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
|||
SColumnInfoData *pInputData = pInput->columnData;
|
||||
SColumnInfoData *pOutputData = pOutput->columnData;
|
||||
|
||||
int32_t outputLen = pInputData->varmeta.length * pInput->numOfRows;
|
||||
char *outputBuf = taosMemoryCalloc(outputLen, 1);
|
||||
char *output = outputBuf;
|
||||
int32_t outputLen = pInputData->info.bytes;
|
||||
char *outputBuf = taosMemoryMalloc(outputLen);
|
||||
if (outputBuf == NULL) {
|
||||
qError("substr function memory allocation failure. size: %d", outputLen);
|
||||
return TSDB_CODE_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
for (int32_t i = 0; i < pInput->numOfRows; ++i) {
|
||||
if (colDataIsNull_s(pInputData, i)) {
|
||||
|
@ -676,14 +679,16 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
|||
startPosBytes = TMAX(startPosBytes, 0);
|
||||
}
|
||||
|
||||
char *output = outputBuf;
|
||||
int32_t resLen = TMIN(subLen, len - startPosBytes);
|
||||
if (resLen > 0) {
|
||||
memcpy(varDataVal(output), varDataVal(input) + startPosBytes, resLen);
|
||||
varDataSetLen(output, resLen);
|
||||
} else {
|
||||
varDataSetLen(output, 0);
|
||||
}
|
||||
|
||||
varDataSetLen(output, resLen);
|
||||
colDataSetVal(pOutputData, i, output, false);
|
||||
output += varDataTLen(output);
|
||||
}
|
||||
|
||||
pOutput->numOfRows = pInput->numOfRows;
|
||||
|
|
Loading…
Reference in New Issue