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 *pInputData = pInput->columnData;
|
||||||
SColumnInfoData *pOutputData = pOutput->columnData;
|
SColumnInfoData *pOutputData = pOutput->columnData;
|
||||||
|
|
||||||
int32_t outputLen = pInputData->varmeta.length * pInput->numOfRows;
|
int32_t outputLen = pInputData->info.bytes;
|
||||||
char *outputBuf = taosMemoryCalloc(outputLen, 1);
|
char *outputBuf = taosMemoryMalloc(outputLen);
|
||||||
char *output = outputBuf;
|
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) {
|
for (int32_t i = 0; i < pInput->numOfRows; ++i) {
|
||||||
if (colDataIsNull_s(pInputData, i)) {
|
if (colDataIsNull_s(pInputData, i)) {
|
||||||
|
@ -676,14 +679,16 @@ int32_t substrFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOu
|
||||||
startPosBytes = TMAX(startPosBytes, 0);
|
startPosBytes = TMAX(startPosBytes, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *output = outputBuf;
|
||||||
int32_t resLen = TMIN(subLen, len - startPosBytes);
|
int32_t resLen = TMIN(subLen, len - startPosBytes);
|
||||||
if (resLen > 0) {
|
if (resLen > 0) {
|
||||||
memcpy(varDataVal(output), varDataVal(input) + startPosBytes, resLen);
|
memcpy(varDataVal(output), varDataVal(input) + startPosBytes, resLen);
|
||||||
|
varDataSetLen(output, resLen);
|
||||||
|
} else {
|
||||||
|
varDataSetLen(output, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
varDataSetLen(output, resLen);
|
|
||||||
colDataSetVal(pOutputData, i, output, false);
|
colDataSetVal(pOutputData, i, output, false);
|
||||||
output += varDataTLen(output);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pOutput->numOfRows = pInput->numOfRows;
|
pOutput->numOfRows = pInput->numOfRows;
|
||||||
|
|
Loading…
Reference in New Issue