From f9bd7c1e9e296d46798434eb9c1f500a4a18ae05 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Thu, 14 Oct 2004 04:12:05 +0000 Subject: Handle excessive entries properly (bug #2634) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3994 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- cli.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cli.c b/cli.c index 21b28b4b0..3eb8dda79 100755 --- a/cli.c +++ b/cli.c @@ -437,11 +437,11 @@ static char *__ast_cli_generator(char *text, char *word, int state, int lock); static int handle_commandmatchesarray(int fd, int argc, char *argv[]) { - char *buf; + char *buf, *obuf; int buflen = 2048; int len = 0; char **matches; - int x; + int x, matchlen; if (argc != 4) return RESULT_SHOWUSAGE; @@ -455,11 +455,17 @@ static int handle_commandmatchesarray(int fd, int argc, char *argv[]) #if 0 printf("command matchesarray for '%s' %s got '%s'\n", argv[2], argv[3], matches[x]); #endif - if (len + strlen(matches[x]) >= buflen) { - buflen += strlen(matches[x]) * 3; - buf = realloc(buf, buflen); + matchlen = strlen(matches[x]) + 1; + if (len + matchlen >= buflen) { + buflen += matchlen * 3; + obuf = buf; + buf = realloc(obuf, buflen); + if (!buf) + /* Out of memory... Just free old buffer and be done */ + free(obuf); } - len += sprintf( buf + len, "%s ", matches[x]); + if (buf) + len += sprintf( buf + len, "%s ", matches[x]); free(matches[x]); matches[x] = NULL; } -- cgit v1.2.3