[PATCH 2/2, RESEND] source4/libcli: Only set ctemp set on success

samlang at gmail.com samlang at gmail.com
Mon Apr 22 09:23:16 MDT 2013


From: Sam Lang <sam.lang at inktank.com>

If open fails ctemp.out.name probably won't be valid and strdup
will cause a segv.  Only set the path if open succeeds.

Signed-off-by: Sam Lang <sam.lang at inktank.com>
---
 source4/libcli/clifile.c |   15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/source4/libcli/clifile.c b/source4/libcli/clifile.c
index f5e02dd..1928824 100644
--- a/source4/libcli/clifile.c
+++ b/source4/libcli/clifile.c
@@ -653,9 +653,10 @@ int smbcli_ctemp(struct smbcli_tree *tree, const char *path, char **tmp_path)
 	union smb_open open_parms;
 	TALLOC_CTX *mem_ctx;
 	NTSTATUS status;
+	int ret = -1;
 
 	mem_ctx = talloc_init("raw_open");
-	if (!mem_ctx) return -1;
+	if (!mem_ctx) return ret;
 
 	open_parms.openx.level = RAW_OPEN_CTEMP;
 	open_parms.ctemp.in.attrib = 0;
@@ -663,12 +664,12 @@ int smbcli_ctemp(struct smbcli_tree *tree, const char *path, char **tmp_path)
 	open_parms.ctemp.in.write_time = 0;
 
 	status = smb_raw_open(tree, mem_ctx, &open_parms);
-	if (tmp_path) {
-		*tmp_path = strdup(open_parms.ctemp.out.name);
-	}
-	talloc_free(mem_ctx);
 	if (NT_STATUS_IS_OK(status)) {
-		return open_parms.ctemp.out.file.fnum;
+		if (tmp_path) {
+			*tmp_path = strdup(open_parms.ctemp.out.name);
+		}
+		ret = open_parms.ctemp.out.file.fnum;
 	}
-	return -1;
+	talloc_free(mem_ctx);
+	return ret;
 }
-- 
1.7.10.4



More information about the samba-technical mailing list