diff --git a/.gitignore b/.gitignore index 1798a920eb..d155512039 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,24 @@ tags *CMakeCache* *CMakeFiles* .history/ +*.txt +*.tcl +*.pc +contrib/geos +contrib/libuv +contrib/pcre2 +contrib/zlib +deps_tmp_CMakeLists.txt.in +*.a +*.ctest +pcre2-config +pcre2_test.sh +pcre2_grep_test.sh +pcre2_chartables.c +geos-config +config.h +pcre2.h +zconf.h +version.h +geos_c.h + diff --git a/cmake/stub_CMakeLists.txt.in b/cmake/stub_CMakeLists.txt.in index 6c54d33be7..4c7a2fb002 100644 --- a/cmake/stub_CMakeLists.txt.in +++ b/cmake/stub_CMakeLists.txt.in @@ -2,7 +2,7 @@ # stub ExternalProject_Add(stub GIT_REPOSITORY https://github.com/coolxv/cpp-stub.git - GIT_TAG 5e903b8e + GIT_TAG 3137465194014d66a8402941e80d2bccc6346f51 GIT_SUBMODULES "src" SOURCE_DIR "${TD_CONTRIB_DIR}/cpp-stub" BINARY_DIR "${TD_CONTRIB_DIR}/cpp-stub/src" diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index ba1e21b897..bbf2889289 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -320,7 +320,7 @@ typedef struct SAlterDnodeStmt { typedef struct { ENodeType type; - char url[TSDB_ANAL_ANODE_URL_LEN]; + char url[TSDB_ANAL_ANODE_URL_LEN + 3]; } SCreateAnodeStmt; typedef struct { diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 603207d8c0..2620342b22 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -482,9 +482,10 @@ int32_t taosGetErrSize(); #define TSDB_CODE_MND_ANODE_TOO_LONG_URL TAOS_DEF_ERROR_CODE(0, 0x0432) #define TSDB_CODE_MND_ANODE_INVALID_PROTOCOL TAOS_DEF_ERROR_CODE(0, 0x0433) #define TSDB_CODE_MND_ANODE_INVALID_VERSION TAOS_DEF_ERROR_CODE(0, 0x0434) -#define TSDB_CODE_MND_ANODE_TOO_MANY_ALGO TAOS_DEF_ERROR_CODE(0, 0x0435) -#define TSDB_CODE_MND_ANODE_TOO_LONG_ALGO_NAME TAOS_DEF_ERROR_CODE(0, 0x0436) -#define TSDB_CODE_MND_ANODE_TOO_MANY_ALGO_TYPE TAOS_DEF_ERROR_CODE(0, 0x0437) +#define TSDB_CODE_MND_ANODE_INVALID_ALGO_TYPE TAOS_DEF_ERROR_CODE(0, 0x0435) +#define TSDB_CODE_MND_ANODE_TOO_MANY_ALGO TAOS_DEF_ERROR_CODE(0, 0x0436) +#define TSDB_CODE_MND_ANODE_TOO_LONG_ALGO_NAME TAOS_DEF_ERROR_CODE(0, 0x0437) +#define TSDB_CODE_MND_ANODE_TOO_MANY_ALGO_TYPE TAOS_DEF_ERROR_CODE(0, 0x0438) // analysis #define TSDB_CODE_ANAL_URL_RSP_IS_NULL TAOS_DEF_ERROR_CODE(0, 0x0440) diff --git a/include/util/tjson.h b/include/util/tjson.h index 50d1a4d438..88c2a1efb7 100644 --- a/include/util/tjson.h +++ b/include/util/tjson.h @@ -71,6 +71,7 @@ int32_t tjsonGetObjectValueString(const SJson* pJson, char** pStringValue); void tjsonGetObjectValueBigInt(const SJson* pJson, int64_t* pVal); void tjsonGetObjectValueDouble(const SJson* pJson, double* pVal); int32_t tjsonGetStringValue(const SJson* pJson, const char* pName, char* pVal); +int32_t tjsonGetStringValue2(const SJson* pJson, const char* pName, char* pVal, int32_t maxLen); int32_t tjsonDupStringValue(const SJson* pJson, const char* pName, char** pVal); int32_t tjsonGetBigIntValue(const SJson* pJson, const char* pName, int64_t* pVal); int32_t tjsonGetIntValue(const SJson* pJson, const char* pName, int32_t* pVal); diff --git a/source/dnode/mnode/impl/src/mndAnode.c b/source/dnode/mnode/impl/src/mndAnode.c index 7e02db0e90..4b0c288bf2 100644 --- a/source/dnode/mnode/impl/src/mndAnode.c +++ b/source/dnode/mnode/impl/src/mndAnode.c @@ -43,7 +43,7 @@ static void mndCancelGetNextAnode(SMnode *pMnode, void *pIter); static int32_t mndRetrieveAnodesFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows); static void mndCancelGetNextAnodeFull(SMnode *pMnode, void *pIter); static int32_t mndGetAnodeAlgoList(const char *url, SAnodeObj *pObj); -static int32_t mndGetAnodeStatus(SAnodeObj *pObj, char *status); +static int32_t mndGetAnodeStatus(SAnodeObj *pObj, char *status, int32_t statusLen); int32_t mndInitAnode(SMnode *pMnode) { SSdbTable table = { @@ -603,7 +603,7 @@ static int32_t mndRetrieveAnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB if (code != 0) goto _end; status[0] = 0; - if (mndGetAnodeStatus(pObj, status) == 0) { + if (mndGetAnodeStatus(pObj, status, 64) == 0) { STR_TO_VARSTR(buf, status); } else { STR_TO_VARSTR(buf, "offline"); @@ -698,7 +698,7 @@ static int32_t mndDecodeAlgoList(SJson *pJson, SAnodeObj *pObj) { code = tjsonGetDoubleValue(pJson, "protocol", &tmp); if (code < 0) return TSDB_CODE_INVALID_JSON_FORMAT; protocol = (int32_t)(tmp * 1000); - if (protocol != 100) return TSDB_CODE_MND_ANODE_INVALID_PROTOCOL; + if (protocol != 100 && protocol != 1000) return TSDB_CODE_MND_ANODE_INVALID_PROTOCOL; code = tjsonGetDoubleValue(pJson, "version", &tmp); pObj->version = (int32_t)(tmp * 1000); @@ -722,10 +722,10 @@ static int32_t mndDecodeAlgoList(SJson *pJson, SAnodeObj *pObj) { SJson *detail = tjsonGetArrayItem(details, d); if (detail == NULL) return TSDB_CODE_INVALID_JSON_FORMAT; - code = tjsonGetStringValue(detail, "type", buf); + code = tjsonGetStringValue2(detail, "type", buf, sizeof(buf)); if (code < 0) return TSDB_CODE_INVALID_JSON_FORMAT; EAnalAlgoType type = taosAnalAlgoInt(buf); - if (type < 0 || type >= ANAL_ALGO_TYPE_END) continue; + if (type < 0 || type >= ANAL_ALGO_TYPE_END) return TSDB_CODE_MND_ANODE_INVALID_ALGO_TYPE; SJson *algos = tjsonGetObjectItem(detail, "algo"); if (algos == NULL) return TSDB_CODE_INVALID_JSON_FORMAT; @@ -734,13 +734,12 @@ static int32_t mndDecodeAlgoList(SJson *pJson, SAnodeObj *pObj) { SJson *algo = tjsonGetArrayItem(algos, a); if (algo == NULL) return TSDB_CODE_INVALID_JSON_FORMAT; - code = tjsonGetStringValue(algo, "name", buf); - if (code < 0) return TSDB_CODE_INVALID_JSON_FORMAT; + code = tjsonGetStringValue2(algo, "name", buf, sizeof(buf)); + if (code < 0) return TSDB_CODE_MND_ANODE_TOO_LONG_ALGO_NAME; SAnodeAlgo algoObj = {0}; algoObj.nameLen = strlen(buf) + 1; - if (algoObj.nameLen > TSDB_ANAL_ALGO_NAME_LEN) return TSDB_CODE_MND_ANODE_TOO_LONG_ALGO_NAME; - if (algoObj.nameLen <= 1) return TSDB_CODE_OUT_OF_MEMORY; + if (algoObj.nameLen <= 1) return TSDB_CODE_INVALID_JSON_FORMAT; algoObj.name = taosMemoryCalloc(algoObj.nameLen, 1); tstrncpy(algoObj.name, buf, algoObj.nameLen); @@ -764,7 +763,7 @@ static int32_t mndGetAnodeAlgoList(const char *url, SAnodeObj *pObj) { TAOS_RETURN(code); } -static int32_t mndGetAnodeStatus(SAnodeObj *pObj, char *status) { +static int32_t mndGetAnodeStatus(SAnodeObj *pObj, char *status, int32_t statusLen) { int32_t code = 0; int32_t protocol = 0; double tmp = 0; @@ -780,12 +779,12 @@ static int32_t mndGetAnodeStatus(SAnodeObj *pObj, char *status) { goto _OVER; } protocol = (int32_t)(tmp * 1000); - if (protocol != 100) { + if (protocol != 100 && protocol != 1000) { code = TSDB_CODE_MND_ANODE_INVALID_PROTOCOL; goto _OVER; } - code = tjsonGetStringValue(pJson, "status", status); + code = tjsonGetStringValue2(pJson, "status", status, statusLen); if (code < 0) { code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index ab06008e6c..dab2126103 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -9581,6 +9581,10 @@ static int32_t translateDropUser(STranslateContext* pCxt, SDropUserStmt* pStmt) static int32_t translateCreateAnode(STranslateContext* pCxt, SCreateAnodeStmt* pStmt) { SMCreateAnodeReq createReq = {0}; createReq.urlLen = strlen(pStmt->url) + 1; + if (createReq.urlLen > TSDB_ANAL_ANODE_URL_LEN) { + return TSDB_CODE_MND_ANODE_TOO_LONG_URL; + } + createReq.url = taosMemoryCalloc(createReq.urlLen, 1); if (createReq.url == NULL) { return TSDB_CODE_OUT_OF_MEMORY; diff --git a/source/util/src/terror.c b/source/util/src/terror.c index 3598262d5d..ad43426efa 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -349,6 +349,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_ALREADY_EXIST, "Anode already exists" TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_NOT_EXIST, "Anode not there") TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_TOO_LONG_URL, "Anode too long url") TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_INVALID_PROTOCOL, "Anode invalid protocol") +TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_INVALID_ALGO_TYPE, "Anode invalid algorithm type") TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_INVALID_VERSION, "Anode invalid version") TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_TOO_MANY_ALGO, "Anode too many algorithm") TAOS_DEFINE_ERROR(TSDB_CODE_MND_ANODE_TOO_LONG_ALGO_NAME, "Anode too long algorithm name") diff --git a/source/util/src/tjson.c b/source/util/src/tjson.c index 314f205057..752a3136ed 100644 --- a/source/util/src/tjson.c +++ b/source/util/src/tjson.c @@ -207,6 +207,19 @@ int32_t tjsonGetStringValue(const SJson* pJson, const char* pName, char* pVal) { return TSDB_CODE_SUCCESS; } +int32_t tjsonGetStringValue2(const SJson* pJson, const char* pName, char* pVal, int32_t maxLen) { + char* p = cJSON_GetStringValue(tjsonGetObjectItem((cJSON*)pJson, pName)); + if (NULL == p) { + return TSDB_CODE_SUCCESS; + } + int32_t len = strlen(p); + if (len >= maxLen-1) { + return TSDB_CODE_OUT_OF_MEMORY; + } + strcpy(pVal, p); + return TSDB_CODE_SUCCESS; +} + int32_t tjsonDupStringValue(const SJson* pJson, const char* pName, char** pVal) { char* p = cJSON_GetStringValue(tjsonGetObjectItem((cJSON*)pJson, pName)); if (NULL == p) { diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index d5e7de3014..0d3ed1f8e6 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -6,8 +6,6 @@ ,,n,unit-test,bash test.sh -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/auto_create_table_json.py - # # army-test # @@ -1543,6 +1541,7 @@ ,,n,develop-test,python3 ./test.py -f 2-query/ts-range.py ,,n,develop-test,python3 ./test.py -f 2-query/tag_scan.py ,,n,develop-test,python3 ./test.py -f 2-query/show_create_db.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/auto_create_table_json.py ,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/custom_col_tag.py ,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/default_json.py ,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/demo.py