From 4c0903c4c291d4c3b79aa2d52f29b59bb80891a1 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 4 Dec 2024 08:33:45 +0800 Subject: [PATCH] enh: boundary check for log output --- source/common/src/tglobal.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 62a1e3f500..76f28d737a 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -1019,11 +1019,12 @@ static int32_t taosSetLogOutput(SConfig *pCfg) { if ((pEnd = strrchr(pLog, '/')) || (pEnd = strrchr(pLog, '\\'))) { int32_t pathLen = POINTER_DISTANCE(pEnd, pLog) + 1; if (*pLog == '/' || *pLog == '\\') { - if (pathLen >= PATH_MAX) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE); + if (pathLen <= 0 || pathLen > PATH_MAX) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE); tstrncpy(tsLogDir, pLog, pathLen); } else { int32_t len = strlen(tsLogDir); - if (tsLogDir[len - 1] != '/' && tsLogDir[len - 1] != '\\') { + if (len < 0 || len >= (PATH_MAX - 1)) TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE); + if (len == 0 || (tsLogDir[len - 1] != '/' && tsLogDir[len - 1] != '\\')) { tsLogDir[len++] = TD_DIRSEP_CHAR; } int32_t remain = PATH_MAX - len - 1;