From baf9de922ca1222ab196f27a8a1ee28a78b78805 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Wed, 10 Jun 2020 05:49:12 +0000 Subject: [PATCH] [TD-586] fqdn returned by mnode may be null --- src/dnode/src/dnodeMgmt.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/dnode/src/dnodeMgmt.c b/src/dnode/src/dnodeMgmt.c index e260e7ec81..d442b12586 100644 --- a/src/dnode/src/dnodeMgmt.c +++ b/src/dnode/src/dnodeMgmt.c @@ -414,15 +414,35 @@ static void dnodeProcessStatusRsp(SRpcMsg *pMsg) { dnodeProcessModuleStatus(pCfg->moduleStatus); dnodeUpdateDnodeCfg(pCfg); + dnodeUpdateMnodeInfos(pMnodes); taosTmrReset(dnodeSendStatusMsg, tsStatusInterval * 1000, NULL, tsDnodeTmr, &tsStatusTimer); } +static bool dnodeCheckMnodeInfos(SDMMnodeInfos *pMnodes) { + if (pMnodes->nodeNum <= 0 || pMnodes->nodeNum > 3) { + dError("invalid mnode infos, num:%d", pMnodes->nodeNum); + return false; + } + + for (int32_t i = 0; i < pMnodes->nodeNum; ++i) { + SDMMnodeInfo *pMnodeInfo = &pMnodes->nodeInfos[i]; + if (pMnodeInfo->nodeId <= 0 || strlen(pMnodeInfo->nodeEp) <= 5) { + dError("invalid mnode info:%d, nodeId:%d nodeEp:%s", pMnodeInfo->nodeId, pMnodeInfo->nodeEp); + return false; + } + } + + return true; +} + static void dnodeUpdateMnodeInfos(SDMMnodeInfos *pMnodes) { bool mnodesChanged = (memcmp(&tsDMnodeInfos, pMnodes, sizeof(SDMMnodeInfos)) != 0); bool mnodesNotInit = (tsDMnodeInfos.nodeNum == 0); if (!(mnodesChanged || mnodesNotInit)) return; + if (!dnodeCheckMnodeInfos(pMnodes)) return; + memcpy(&tsDMnodeInfos, pMnodes, sizeof(SDMMnodeInfos)); dPrint("mnode infos is changed, nodeNum:%d inUse:%d", tsDMnodeInfos.nodeNum, tsDMnodeInfos.inUse); for (int32_t i = 0; i < tsDMnodeInfos.nodeNum; i++) { -- GitLab