Author: jra
Date: 2006-03-13 19:40:55 +0000 (Mon, 13 Mar 2006)
New Revision: 14341

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14341

Log:
Fix coverity #78, resource leak in error path.
Jeremy.

Modified:
   trunk/source/rpcclient/rpcclient.c


Changeset:
Modified: trunk/source/rpcclient/rpcclient.c
===================================================================
--- trunk/source/rpcclient/rpcclient.c  2006-03-13 19:40:51 UTC (rev 14340)
+++ trunk/source/rpcclient/rpcclient.c  2006-03-13 19:40:55 UTC (rev 14341)
@@ -58,35 +58,43 @@
 #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;
                
        }

Reply via email to