From 365b9ba7a0acaeb2df13584bb85bd0d47ea9db24 Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang <1296468573@qq.com> Date: Sun, 9 Oct 2022 15:40:27 +0800 Subject: [PATCH] fix: shell source error (#17234) --- source/os/src/osSysinfo.c | 40 ++++++++++++++--------------------- source/util/src/tconfig.c | 10 ++++----- tools/shell/src/shellEngine.c | 22 ++++++++++++------- 3 files changed, 34 insertions(+), 38 deletions(-) diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index a57bd4ee63..f5f02676af 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -154,8 +154,8 @@ static int32_t taosGetSysCpuInfo(SysCpuInfo *cpuInfo) { return -1; } - char *line = NULL; - ssize_t _bytes = taosGetLineFile(pFile, &line); + char line[1024]; + ssize_t _bytes = taosGetsFile(pFile, sizeof(line), line); if ((_bytes < 0) || (line == NULL)) { taosCloseFile(&pFile); return -1; @@ -165,7 +165,6 @@ static int32_t taosGetSysCpuInfo(SysCpuInfo *cpuInfo) { sscanf(line, "%s %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64, cpu, &cpuInfo->user, &cpuInfo->nice, &cpuInfo->system, &cpuInfo->idle); - if (line != NULL) taosMemoryFreeClear(line); taosCloseFile(&pFile); #endif return 0; @@ -194,8 +193,8 @@ static int32_t taosGetProcCpuInfo(ProcCpuInfo *cpuInfo) { return -1; } - char *line = NULL; - ssize_t _bytes = taosGetLineFile(pFile, &line); + char line[1024]; + ssize_t _bytes = taosGetsFile(pFile, sizeof(line), line); if ((_bytes < 0) || (line == NULL)) { taosCloseFile(&pFile); return -1; @@ -210,7 +209,6 @@ static int32_t taosGetProcCpuInfo(ProcCpuInfo *cpuInfo) { } } - if (line != NULL) taosMemoryFreeClear(line); taosCloseFile(&pFile); #endif return 0; @@ -286,14 +284,14 @@ int32_t taosGetOsReleaseName(char *releaseName, int32_t maxLen) { snprintf(releaseName, maxLen, "Windows"); return 0; #elif defined(_TD_DARWIN_64) - char *line = NULL; + char line[1024]; size_t size = 0; int32_t code = -1; TdFilePtr pFile = taosOpenFile("/etc/os-release", TD_FILE_READ | TD_FILE_STREAM); if (pFile == NULL) return false; - while ((size = taosGetLineFile(pFile, &line)) != -1) { + while ((size = taosGetsFile(pFile, sizeof(line), line)) != -1) { line[size - 1] = '\0'; if (strncmp(line, "PRETTY_NAME", 11) == 0) { const char *p = strchr(line, '=') + 1; @@ -307,18 +305,17 @@ int32_t taosGetOsReleaseName(char *releaseName, int32_t maxLen) { } } - if (line != NULL) taosMemoryFree(line); taosCloseFile(&pFile); return code; #else - char *line = NULL; + char line[1024]; size_t size = 0; int32_t code = -1; TdFilePtr pFile = taosOpenFile("/etc/os-release", TD_FILE_READ | TD_FILE_STREAM); if (pFile == NULL) return false; - while ((size = taosGetLineFile(pFile, &line)) != -1) { + while ((size = taosGetsFile(pFile, sizeof(line), line)) != -1) { line[size - 1] = '\0'; if (strncmp(line, "PRETTY_NAME", 11) == 0) { const char *p = strchr(line, '=') + 1; @@ -332,7 +329,6 @@ int32_t taosGetOsReleaseName(char *releaseName, int32_t maxLen) { } } - if (line != NULL) taosMemoryFree(line); taosCloseFile(&pFile); return code; #endif @@ -374,7 +370,7 @@ int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) { return code; #else - char *line = NULL; + char line[1024]; size_t size = 0; int32_t done = 0; int32_t code = -1; @@ -383,7 +379,7 @@ int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) { TdFilePtr pFile = taosOpenFile("/proc/cpuinfo", TD_FILE_READ | TD_FILE_STREAM); if (pFile == NULL) return code; - while (done != 3 && (size = taosGetLineFile(pFile, &line)) != -1) { + while (done != 3 && (size = taosGetsFile(pFile, sizeof(line), line)) != -1) { line[size - 1] = '\0'; if (((done & 1) == 0) && strncmp(line, "model name", 10) == 0) { const char *v = strchr(line, ':') + 2; @@ -398,7 +394,6 @@ int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) { if (strncmp(line, "processor", 9) == 0) coreCount += 1; } - if (line != NULL) taosMemoryFree(line); taosCloseFile(&pFile); if (code != 0 && (done & 1) == 0) { @@ -517,9 +512,9 @@ int32_t taosGetProcMemory(int64_t *usedKB) { } ssize_t _bytes = 0; - char *line = NULL; + char line[1024]; while (!taosEOFFile(pFile)) { - _bytes = taosGetLineFile(pFile, &line); + _bytes = taosGetsFile(pFile, sizeof(line), line); if ((_bytes < 0) || (line == NULL)) { break; } @@ -537,7 +532,6 @@ int32_t taosGetProcMemory(int64_t *usedKB) { char tmp[10]; sscanf(line, "%s %" PRId64, tmp, usedKB); - if (line != NULL) taosMemoryFreeClear(line); taosCloseFile(&pFile); return 0; #endif @@ -631,12 +625,12 @@ int32_t taosGetProcIO(int64_t *rchars, int64_t *wchars, int64_t *read_bytes, int if (pFile == NULL) return -1; ssize_t _bytes = 0; - char *line = NULL; + char line[1024]; char tmp[24]; int readIndex = 0; while (!taosEOFFile(pFile)) { - _bytes = taosGetLineFile(pFile, &line); + _bytes = taosGetsFile(pFile, sizeof(line), line); if (_bytes < 10 || line == NULL) { break; } @@ -658,7 +652,6 @@ int32_t taosGetProcIO(int64_t *rchars, int64_t *wchars, int64_t *read_bytes, int if (readIndex >= 4) break; } - if (line != NULL) taosMemoryFreeClear(line); taosCloseFile(&pFile); if (readIndex < 4) { @@ -709,7 +702,7 @@ int32_t taosGetCardInfo(int64_t *receive_bytes, int64_t *transmit_bytes) { if (pFile == NULL) return -1; ssize_t _bytes = 0; - char *line = NULL; + char line[1024]; while (!taosEOFFile(pFile)) { int64_t o_rbytes = 0; @@ -724,7 +717,7 @@ int32_t taosGetCardInfo(int64_t *receive_bytes, int64_t *transmit_bytes) { int64_t nouse6 = 0; char nouse0[200] = {0}; - _bytes = taosGetLineFile(pFile, &line); + _bytes = taosGetsFile(pFile, sizeof(line), line); if (_bytes < 0) { break; } @@ -743,7 +736,6 @@ int32_t taosGetCardInfo(int64_t *receive_bytes, int64_t *transmit_bytes) { *transmit_bytes = o_tbytes; } - if (line != NULL) taosMemoryFreeClear(line); taosCloseFile(&pFile); return 0; diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index 2a28ec66d2..58f90b68c9 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -714,7 +714,7 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { } int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { - char *line = NULL, *name, *value, *value2, *value3; + char line[1024], *name, *value, *value2, *value3; int32_t olen, vlen, vlen2, vlen3; int32_t code = 0; ssize_t _bytes = 0; @@ -743,7 +743,7 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { name = value = value2 = value3 = NULL; olen = vlen = vlen2 = vlen3 = 0; - _bytes = taosGetLineFile(pFile, &line); + _bytes = taosGetsFile(pFile, sizeof(line), line); if (_bytes <= 0) { break; } @@ -775,14 +775,13 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { } taosCloseFile(&pFile); - if (line != NULL) taosMemoryFreeClear(line); uInfo("load from env cfg file %s success", filepath); return 0; } int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { - char *line = NULL, *name, *value, *value2, *value3; + char line[1024], *name, *value, *value2, *value3; int32_t olen, vlen, vlen2, vlen3; ssize_t _bytes = 0; int32_t code = 0; @@ -804,7 +803,7 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { name = value = value2 = value3 = NULL; olen = vlen = vlen2 = vlen3 = 0; - _bytes = taosGetLineFile(pFile, &line); + _bytes = taosGetsFile(pFile, sizeof(line), line); if (_bytes <= 0) { break; } @@ -836,7 +835,6 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { } taosCloseFile(&pFile); - if (line != NULL) taosMemoryFreeClear(line); if (code == 0 || (code != 0 && terrno == TSDB_CODE_CFG_NOT_FOUND)) { uInfo("load from cfg file %s success", filepath); diff --git a/tools/shell/src/shellEngine.c b/tools/shell/src/shellEngine.c index 066b3a0156..abb6cf84d5 100644 --- a/tools/shell/src/shellEngine.c +++ b/tools/shell/src/shellEngine.c @@ -88,9 +88,15 @@ int32_t shellRunSingleCommand(char *command) { if (shellRegexMatch(command, "^[ \t]*source[\t ]+[^ ]+[ \t;]*$", REG_EXTENDED | REG_ICASE)) { /* If source file. */ char *c_ptr = strtok(command, " ;"); - assert(c_ptr != NULL); + if (c_ptr == NULL) { + shellRunSingleCommandImp(command); + return 0; + } c_ptr = strtok(NULL, " ;"); - assert(c_ptr != NULL); + if (c_ptr == NULL) { + shellRunSingleCommandImp(command); + return 0; + } shellSourceFile(c_ptr); return 0; } @@ -781,9 +787,9 @@ void shellReadHistory() { TdFilePtr pFile = taosOpenFile(pHistory->file, TD_FILE_READ | TD_FILE_STREAM); if (pFile == NULL) return; - char *line = NULL; + char *line = taosMemoryMalloc(TSDB_MAX_ALLOWED_SQL_LEN + 1); int32_t read_size = 0; - while ((read_size = taosGetLineFile(pFile, &line)) != -1) { + while ((read_size = taosGetsFile(pFile, TSDB_MAX_ALLOWED_SQL_LEN, line)) != -1) { line[read_size - 1] = '\0'; taosMemoryFree(pHistory->hist[pHistory->hend]); pHistory->hist[pHistory->hend] = strdup(line); @@ -795,7 +801,7 @@ void shellReadHistory() { } } - if (line != NULL) taosMemoryFree(line); + taosMemoryFreeClear(line); taosCloseFile(&pFile); int64_t file_size; if (taosStatFile(pHistory->file, &file_size, NULL) == 0 && file_size > SHELL_MAX_COMMAND_SIZE) { @@ -859,7 +865,6 @@ void shellSourceFile(const char *file) { int32_t read_len = 0; char *cmd = taosMemoryCalloc(1, TSDB_MAX_ALLOWED_SQL_LEN + 1); size_t cmd_len = 0; - char *line = NULL; char fullname[PATH_MAX] = {0}; char sourceFileCommand[PATH_MAX + 8] = {0}; @@ -877,7 +882,8 @@ void shellSourceFile(const char *file) { return; } - while ((read_len = taosGetLineFile(pFile, &line)) != -1) { + char *line = taosMemoryMalloc(TSDB_MAX_ALLOWED_SQL_LEN + 1); + while ((read_len = taosGetsFile(pFile, TSDB_MAX_ALLOWED_SQL_LEN, line)) != -1) { if (read_len >= TSDB_MAX_ALLOWED_SQL_LEN) continue; line[--read_len] = '\0'; @@ -904,7 +910,7 @@ void shellSourceFile(const char *file) { } taosMemoryFree(cmd); - if (line != NULL) taosMemoryFree(line); + taosMemoryFreeClear(line); taosCloseFile(&pFile); } -- GitLab