diff --git a/common/utils/telnetsrv/telnetsrv.c b/common/utils/telnetsrv/telnetsrv.c index 407a6b73b9..61bff2310c 100644 --- a/common/utils/telnetsrv/telnetsrv.c +++ b/common/utils/telnetsrv/telnetsrv.c @@ -561,7 +561,7 @@ int process_command(char *buf, int iteration) } rt=CMDSTATUS_NOTFOUND; - j = sscanf(buf,"%19s %19s %m[^\t\n]",modulename,cmd,&cmdb); + j = sscanf(buf,"%19s %63s %m[^\t\n]",modulename,cmd,&cmdb); if (telnetparams.telnetdbg > 0) printf("process_command: %i words, module=%s cmd=%s, parameters= %s\n", j, modulename, cmd, (cmdb == NULL) ? "" : cmdb); @@ -947,6 +947,12 @@ int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmdde telnetparams.CmdParsers[i].cmd = cmd; telnetparams.CmdParsers[i].var = var; for (int j = 0; cmd[j].cmdfunc != NULL; j++) { + size_t cmdnamelen = strnlen(cmd[j].cmdname, TELNET_CMD_MAXSIZE); + AssertFatal(cmdnamelen < TELNET_CMD_MAXSIZE, + "cmdname %s too long: %ld >= %d", + cmd[j].cmdname, + cmdnamelen, + TELNET_CMD_MAXSIZE); if (cmd[j].cmdflags & TELNETSRV_CMDFLAG_PUSHINTPOOLQ) { if (afifo == NULL) { afifo = calloc_or_fail(1, sizeof(notifiedFIFO_t)); diff --git a/common/utils/telnetsrv/telnetsrv.h b/common/utils/telnetsrv/telnetsrv.h index b841905cae..bd90513cd1 100644 --- a/common/utils/telnetsrv/telnetsrv.h +++ b/common/utils/telnetsrv/telnetsrv.h @@ -35,8 +35,8 @@ #define TELNET_MAX_MSGLENGTH 2048 #define TELNET_PROMPT_PREFIX "softmodem" -#define TELNET_MAXCMD 20 -#define TELNET_CMD_MAXSIZE 20 +#define TELNET_MAXCMD 64 +#define TELNET_CMD_MAXSIZE 64 #define TELNET_HELPSTR_SIZE 80 /* status return by the command parser after it analysed user input */