diff options
author | Vandana Rungta <vrungta@amazon.com> | 2018-05-08 11:27:47 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2018-05-09 04:28:11 +0200 |
commit | 4e78aeedb8329953df83fc7f2c191b2c97a051d0 (patch) | |
tree | 978709337479a72a1fed29089961aecb731a93db /source3 | |
parent | 233d22138bbddc3374b9b2e6b6806c2ee0c51965 (diff) | |
download | samba-4e78aeedb8329953df83fc7f2c191b2c97a051d0.tar.gz |
s3: VFS: Fix memory leak in vfs_ceph.
Centralize error handling.
https://bugzilla.samba.org/show_bug.cgi?id=13424
Signed-off-by: Vandana Rungta <vrungta@amazon.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
Reviewed-by: David Disseldorp <ddiss@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Wed May 9 04:28:11 CEST 2018 on sn-devel-144
Diffstat (limited to 'source3')
-rw-r--r-- | source3/modules/vfs_ceph.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index e49e7a6be00..87df83e805b 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -1211,30 +1211,31 @@ static struct smb_filename *cephwrap_realpath(struct vfs_handle_struct *handle, TALLOC_CTX *ctx, const struct smb_filename *smb_fname) { - char *result; + char *result = NULL; const char *path = smb_fname->base_name; size_t len = strlen(path); struct smb_filename *result_fname = NULL; + int r = -1; - result = SMB_MALLOC_ARRAY(char, PATH_MAX+1); if (len && (path[0] == '/')) { - int r = asprintf(&result, "%s", path); - if (r < 0) return NULL; + r = asprintf(&result, "%s", path); } else if ((len >= 2) && (path[0] == '.') && (path[1] == '/')) { if (len == 2) { - int r = asprintf(&result, "%s", + r = asprintf(&result, "%s", handle->conn->connectpath); - if (r < 0) return NULL; } else { - int r = asprintf(&result, "%s/%s", + r = asprintf(&result, "%s/%s", handle->conn->connectpath, &path[2]); - if (r < 0) return NULL; } } else { - int r = asprintf(&result, "%s/%s", + r = asprintf(&result, "%s/%s", handle->conn->connectpath, path); - if (r < 0) return NULL; } + + if (r < 0) { + return NULL; + } + DBG_DEBUG("[CEPH] realpath(%p, %s) = %s\n", handle, path, result); result_fname = synthetic_smb_fname(ctx, result, |