From 727c611fe3c903d905871a46909ed1e7639add15 Mon Sep 17 00:00:00 2001 From: Sam Lang Date: Mon, 22 Apr 2013 10:23:16 -0500 Subject: source4/libcli: Only set ctemp set on success 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 Reviewed-by: Volker Lendecke Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Wed Apr 24 23:58:44 CEST 2013 on sn-devel-104 --- source4/libcli/clifile.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'source4/libcli') diff --git a/source4/libcli/clifile.c b/source4/libcli/clifile.c index f5e02dd458..19288247c4 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; } -- cgit