Fix some leaks in CLI (thanks James)
authorMark Spencer <markster@digium.com>
Tue, 8 Apr 2003 13:45:36 +0000 (13:45 +0000)
committerMark Spencer <markster@digium.com>
Tue, 8 Apr 2003 13:45:36 +0000 (13:45 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@777 65c4cc65-6c06-0410-ace0-fbb531ad65f3

asterisk.c
cli.c

index 8b4ae45..b0635c7 100755 (executable)
@@ -686,14 +686,14 @@ static int ast_el_read_char(EditLine *el, char *cp)
 
 static char *cli_prompt(EditLine *el)
 {
-       char prompt[80];
+       static char prompt[80];
 
        if (remotehostname)
                snprintf(prompt, sizeof(prompt), ASTERISK_PROMPT2, remotehostname);
        else
                snprintf(prompt, sizeof(prompt), ASTERISK_PROMPT);
 
-       return strdup(prompt);
+       return(prompt); 
 }
 
 static char **ast_el_strtoarr(char *buf)
@@ -839,7 +839,7 @@ static char *cli_complete(EditLine *el, int ch)
 
                if (nummatches == 1) {
                        /* Found an exact match */
-                       el_insertstr(el, strdup(" "));
+                       el_insertstr(el, " ");
                        retval = CC_REFRESH;
                } else {
                        /* Must be more than one match */
@@ -854,11 +854,11 @@ static char *cli_complete(EditLine *el, int ch)
                                ast_cli_display_match_list(matches, nummatches, maxlen);
                                retval = CC_REDISPLAY;
                        } else { 
-                               el_insertstr(el,strdup(" "));
+                               el_insertstr(el," ");
                                retval = CC_REFRESH;
                        }
                }
-
+       free(matches);
        }
 
        return (char *)retval;
diff --git a/cli.c b/cli.c
index b9cb021..340e8c1 100755 (executable)
--- a/cli.c
+++ b/cli.c
@@ -278,7 +278,10 @@ static int handle_commandmatchesarray(int fd, int argc, char *argv[])
                        printf("command matchesarray for '%s' %s got '%s'\n", argv[2], argv[3], matches[x]);
 #endif
                        len += sprintf( buf + len, "%s ", matches[x]);
+                       free(matches[x]);
+                       matches[x] = NULL;
                }
+               free(matches);
        }
 #if 0
        printf("array for '%s' %s got '%s'\n", argv[2], argv[3], buf);
@@ -765,12 +768,16 @@ normal:
 int ast_cli_generatornummatches(char *text, char *word)
 {
        int matches = 0, i = 0;
-       char *buf, *oldbuf;
+       char *buf, *oldbuf = NULL;
 
 
        while ( (buf = ast_cli_generator(text, word, i)) ) {
-               if (++i > 1 && strcmp(buf,oldbuf) == 0)  
+               if (++i > 1 && strcmp(buf,oldbuf) == 0)  {
+                               free(buf);
                                continue;
+               }
+               if (oldbuf)
+                       free(oldbuf);
                oldbuf = buf;
                matches++;
        }
@@ -866,6 +873,7 @@ static char *__ast_cli_generator(char *text, char *word, int state, int lock)
                                        if (res) {
                                                if (lock)
                                                        ast_pthread_mutex_unlock(&clilock);
+                                               free(dup);
                                                return res ? strdup(res) : NULL;
                                        }
                                }