r14340: Fix coverity #78, resource leak in error path.
authorJeremy Allison <jra@samba.org>
Mon, 13 Mar 2006 19:40:51 +0000 (19:40 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:15:26 +0000 (11:15 -0500)
Jeremy.

source/rpcclient/rpcclient.c

index 8d70c6030a34beb10b122fe322d5a12e08ae1c30..4639b315d150d643a34dd2ebac6048328b15f940 100644 (file)
@@ -58,35 +58,43 @@ static char **completion_fn(const char *text, int start, int end)
 #endif
 
        /* make sure we have a list of valid commands */
-       if (!commands) 
+       if (!commands) {
                return NULL;
+       }
 
        matches = SMB_MALLOC_ARRAY(char *, MAX_COMPLETIONS);
-       if (!matches) return NULL;
+       if (!matches) {
+               return NULL;
+       }
 
        matches[count++] = SMB_STRDUP(text);
-       if (!matches[0]) return NULL;
+       if (!matches[0]) {
+               SAFE_FREE(matches);
+               return NULL;
+       }
 
-       while (commands && count < MAX_COMPLETIONS-1) 
-       {
-               if (!commands->cmd_set)
+       while (commands && count < MAX_COMPLETIONS-1) {
+               if (!commands->cmd_set) {
                        break;
+               }
                
-               for (i=0; commands->cmd_set[i].name; i++)
-               {
+               for (i=0; commands->cmd_set[i].name; i++) {
                        if ((strncmp(text, commands->cmd_set[i].name, strlen(text)) == 0) &&
                                (( commands->cmd_set[i].returntype == RPC_RTYPE_NTSTATUS &&
                         commands->cmd_set[i].ntfn ) || 
                       ( commands->cmd_set[i].returntype == RPC_RTYPE_WERROR &&
-                        commands->cmd_set[i].wfn)))
-                       {
+                        commands->cmd_set[i].wfn))) {
                                matches[count] = SMB_STRDUP(commands->cmd_set[i].name);
-                               if (!matches[count]) 
+                               if (!matches[count]) {
+                                       for (i = 0; i < count; i++) {
+                                               SAFE_FREE(matches[count]);
+                                       }
+                                       SAFE_FREE(matches);
                                        return NULL;
+                               }
                                count++;
                        }
                }
-               
                commands = commands->next;
                
        }