fix: address sanitizer error

This commit is contained in:
slzhou 2023-08-30 17:12:12 +08:00
parent 82dc2de2f4
commit f41783c73f
4 changed files with 34 additions and 15 deletions

View File

@ -224,6 +224,8 @@ typedef struct SCreateUserStmt {
int8_t sysinfo;
int32_t numIpRanges;
SIpV4Range* pIpRanges;
SNodeList* pNodeListIpRanges;
} SCreateUserStmt;
typedef struct SAlterUserStmt {
@ -235,6 +237,8 @@ typedef struct SAlterUserStmt {
int8_t sysinfo;
int32_t numIpRanges;
SIpV4Range* pIpRanges;
SNodeList* pNodeListIpRanges;
} SAlterUserStmt;
typedef struct SDropUserStmt {

View File

@ -927,11 +927,13 @@ void nodesDestroyNode(SNode* pNode) {
case QUERY_NODE_CREATE_USER_STMT: {
SCreateUserStmt* pStmt = (SCreateUserStmt*)pNode;
taosMemoryFree(pStmt->pIpRanges);
nodesDestroyList(pStmt->pNodeListIpRanges);
break;
}
case QUERY_NODE_ALTER_USER_STMT: {
SAlterUserStmt* pStmt = (SAlterUserStmt*)pNode;
taosMemoryFree(pStmt->pIpRanges);
nodesDestroyList(pStmt->pNodeListIpRanges);
}
case QUERY_NODE_DROP_USER_STMT: // no pointer field
case QUERY_NODE_USE_DATABASE_STMT: // no pointer field

View File

@ -1655,33 +1655,39 @@ SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* p
}
static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange) {
struct in_addr addr;
char* ipCopy = strdup(ipRange);
int32_t code = TSDB_CODE_SUCCESS;
char* ipCopy = taosStrdup(ipRange);
char* slash = strchr(ipCopy, '/');
if (slash) {
*slash = '\0';
struct in_addr addr;
if (inet_pton(AF_INET, ipCopy, &addr) == 1) {
int prefix = atoi(slash + 1);
pIpRange->ip = addr.s_addr;
uint32_t mask = (1 << (32 - prefix)) - 1;
mask = htonl(~mask);
pIpRange->mask = mask;
if (prefix < 0 || prefix > 32) {
return TSDB_CODE_PAR_INVALID_IP_RANGE;
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
} else {
pIpRange->ip = addr.s_addr;
uint32_t mask = (1 << (32 - prefix)) - 1;
mask = htonl(~mask);
pIpRange->mask = mask;
code = TSDB_CODE_SUCCESS;
}
} else {
return TSDB_CODE_PAR_INVALID_IP_RANGE;
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
}
} else {
struct in_addr addr;
if (inet_pton(AF_INET, ipCopy, &addr) == 1) {
pIpRange->ip = addr.s_addr;
pIpRange->mask = 0xFFFFFFFF;
code = TSDB_CODE_SUCCESS;
} else {
return TSDB_CODE_PAR_INVALID_IP_RANGE;
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
}
}
return TSDB_CODE_SUCCESS;
taosMemoryFreeClear(ipCopy);
return code;
}
static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIpRangesNodeList, SIpV4Range* pIpRanges) {
@ -1706,6 +1712,8 @@ static int32_t fillIpRangesFromWhiteList(SAstCreateContext* pCxt, SNodeList* pIp
}
SNode* addCreateUserStmtWhiteList(SAstCreateContext* pCxt, SNode* pCreateUserStmt, SNodeList* pIpRangesNodeList) {
((SCreateUserStmt*)pCreateUserStmt)->pNodeListIpRanges = pIpRangesNodeList;
if (pIpRangesNodeList == NULL) {
return pCreateUserStmt;
}
@ -1773,6 +1781,7 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al
case TSDB_ALTER_USER_ADD_WHITE_LIST:
case TSDB_ALTER_USER_DROP_WHITE_LIST: {
SNodeList* pIpRangesNodeList = pAlterInfo;
pStmt->pNodeListIpRanges = pIpRangesNodeList;
pStmt->numIpRanges = LIST_LENGTH(pIpRangesNodeList);
pStmt->pIpRanges = taosMemoryMalloc(pStmt->numIpRanges * sizeof(SIpV4Range));
if (NULL == pStmt->pIpRanges) {

View File

@ -5713,10 +5713,12 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt
createReq.enable = 1;
strcpy(createReq.pass, pStmt->password);
createReq.numIpRanges = pStmt->numIpRanges;
createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges);
createReq.pIpRanges = taosMemoryMalloc(createReq.numIpRanges * sizeof(SIpV4Range));
memcpy(createReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * createReq.numIpRanges);
return buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq);
int32_t code = buildCmdMsg(pCxt, TDMT_MND_CREATE_USER, (FSerializeFunc)tSerializeSCreateUserReq, &createReq);
tFreeSCreateUserReq(&createReq);
return code;
}
static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt) {
@ -5731,10 +5733,12 @@ static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt
snprintf(alterReq.objname, sizeof(alterReq.objname), "%s", pCxt->pParseCxt->db);
}
alterReq.numIpRanges = pStmt->numIpRanges;
alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges);
alterReq.pIpRanges = taosMemoryMalloc(alterReq.numIpRanges * sizeof(SIpV4Range));
memcpy(alterReq.pIpRanges, pStmt->pIpRanges, sizeof(SIpV4Range) * alterReq.numIpRanges);
return buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq);
int32_t code = buildCmdMsg(pCxt, TDMT_MND_ALTER_USER, (FSerializeFunc)tSerializeSAlterUserReq, &alterReq);
tFreeSAlterUserReq(&alterReq);
return code;
}
static int32_t translateDropUser(STranslateContext* pCxt, SDropUserStmt* pStmt) {