From 8c36142a9c63b7180764be1b642ac6f04fc6d001 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Mon, 25 Apr 2022 17:16:47 +0800 Subject: [PATCH] fix(query): fix scalar function input is constant return var type value contains illegal characters. TD-15116 --- source/libs/function/src/builtins.c | 2 +- source/libs/scalar/src/scalar.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/source/libs/function/src/builtins.c b/source/libs/function/src/builtins.c index a52e39bd4f..70087ee46b 100644 --- a/source/libs/function/src/builtins.c +++ b/source/libs/function/src/builtins.c @@ -355,7 +355,7 @@ static int32_t translateToIso8601(SFunctionNode* pFunc, char* pErrBuf, int32_t l return invaildFuncParaTypeErrMsg(pErrBuf, len, pFunc->functionName); } - pFunc->node.resType = (SDataType) { .bytes = 24, .type = TSDB_DATA_TYPE_BINARY}; + pFunc->node.resType = (SDataType) { .bytes = 64, .type = TSDB_DATA_TYPE_BINARY}; return TSDB_CODE_SUCCESS; } diff --git a/source/libs/scalar/src/scalar.c b/source/libs/scalar/src/scalar.c index 820a4894b5..d6c0989f19 100644 --- a/source/libs/scalar/src/scalar.c +++ b/source/libs/scalar/src/scalar.c @@ -489,7 +489,7 @@ EDealRes sclRewriteFunction(SNode** pNode, SScalarCtx *ctx) { if (fmIsUserDefinedFunc(node->funcId)) { return DEAL_RES_CONTINUE; } - + FOREACH(tnode, node->pParameterList) { if (!SCL_IS_CONST_NODE(tnode)) { return DEAL_RES_CONTINUE; @@ -517,8 +517,10 @@ EDealRes sclRewriteFunction(SNode** pNode, SScalarCtx *ctx) { res->node.resType = node->node.resType; int32_t type = output.columnData->info.type; if (IS_VAR_DATA_TYPE(type)) { - res->datum.p = output.columnData->pData; - output.columnData->pData = NULL; + size_t tLen = varDataLen(output.columnData->pData); + ASSERT(tLen <= res->node.resType.bytes); + res->datum.p = taosMemoryCalloc(res->node.resType.bytes + VARSTR_HEADER_SIZE + 1, 1); + memcpy(res->datum.p, output.columnData->pData, tLen); } else { memcpy(nodesGetValueFromNode(res), output.columnData->pData, tDataTypes[type].bytes); } -- GitLab