r12275: Fix memory leak found by Mikhail Kshevetskiy <kl@laska.dorms.spbu.ru>
authorJeremy Allison <jra@samba.org>
Fri, 16 Dec 2005 00:10:59 +0000 (00:10 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:05:51 +0000 (11:05 -0500)
and followed up by derrell@samba.org.
Jeremy.

source/libsmb/clilist.c
source/rpc_client/cli_pipe.c

index e09a6514ad9f6dfc7ed8315bbc26f006c6120567..252dafcfa8b9b3ae6b5f408fb356b55f8ad6f2b1 100644 (file)
@@ -271,6 +271,10 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
                           it gives ERRSRV/ERRerror temprarily */
                        uint8 eclass;
                        uint32 ecode;
+
+                       SAFE_FREE(rdata);
+                       SAFE_FREE(rparam);
+
                        cli_dos_error(cli, &eclass, &ecode);
                        if (eclass != ERRSRV || ecode != ERRerror)
                                break;
@@ -278,8 +282,11 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
                        continue;
                }
 
-                if (cli_is_error(cli) || !rdata || !rparam) 
+                if (cli_is_error(cli) || !rdata || !rparam) {
+                       SAFE_FREE(rdata);
+                       SAFE_FREE(rparam);
                        break;
+               }
 
                if (total_received == -1)
                        total_received = 0;
@@ -297,8 +304,11 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
                        ff_lastname = SVAL(p,6);
                }
 
-               if (ff_searchcount == 0) 
+               if (ff_searchcount == 0) {
+                       SAFE_FREE(rdata);
+                       SAFE_FREE(rparam);
                        break;
+               }
 
                /* point to the data bytes */
                p = rdata;
@@ -332,6 +342,8 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
 
                if (!tdl) {
                        DEBUG(0,("cli_list_new: Failed to expand dirlist\n"));
+                       SAFE_FREE(rdata);
+                       SAFE_FREE(rparam);
                        break;
                } else {
                        dirlist = tdl;
index e1143e63423cdb8309cb04e1572f9759c121b7fb..23c66acf26ec9e2dd8e2e78df0da494602af93ca 100644 (file)
@@ -789,6 +789,8 @@ static NTSTATUS rpc_api_pipe(struct rpc_pipe_client *cli,
                        (unsigned int)cli->fnum,
                        cli_errstr(cli->cli)));
                ret = cli_get_nt_error(cli->cli);
+               SAFE_FREE(rparam);
+               SAFE_FREE(prdata);
                goto err;
        }