diff --git a/tools/shell/inc/shellInt.h b/tools/shell/inc/shellInt.h index 382009905c..825866e163 100644 --- a/tools/shell/inc/shellInt.h +++ b/tools/shell/inc/shellInt.h @@ -62,7 +62,7 @@ typedef struct { bool is_check; bool is_startup; bool is_help; - uint16_t port; + int32_t port; int32_t pktLen; int32_t pktNum; int32_t displayWidth; diff --git a/tools/shell/src/shellArguments.c b/tools/shell/src/shellArguments.c index 8ccfde4b16..13f8cde3e3 100644 --- a/tools/shell/src/shellArguments.c +++ b/tools/shell/src/shellArguments.c @@ -99,6 +99,7 @@ static int32_t shellParseSingleOpt(int32_t key, char *arg) { break; case 'P': pArgs->port = atoi(arg); + if (pArgs->port == 0) pArgs->port = -1; break; case 'u': pArgs->user = arg; @@ -304,6 +305,11 @@ static int32_t shellCheckArgs() { return -1; } + if (pArgs->port < 0 || pArgs->port > 65535) { + printf("Invalid port\n"); + return -1; + } + if (pArgs->pktLen < SHELL_MIN_PKG_LEN || pArgs->pktLen > SHELL_MAX_PKG_LEN) { printf("Invalid pktLen:%d, range:[%d, %d]\n", pArgs->pktLen, SHELL_MIN_PKG_LEN, SHELL_MAX_PKG_LEN); return -1;