diff options
-rw-r--r-- | source3/modules/vfs_shadow_copy2.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c index 93330f4b50..e3c3f9f3a0 100644 --- a/source3/modules/vfs_shadow_copy2.c +++ b/source3/modules/vfs_shadow_copy2.c @@ -684,7 +684,7 @@ static char *shadow_copy2_realpath(vfs_handle_struct *handle, static const char *shadow_copy2_connectpath(struct vfs_handle_struct *handle, const char *fname) { - TALLOC_CTX *tmp_ctx = talloc_stackframe(); + TALLOC_CTX *tmp_ctx; const char *snapdir, *baseoffset, *basedir, *gmt_start; size_t baselen; char *ret; @@ -695,7 +695,14 @@ static const char *shadow_copy2_connectpath(struct vfs_handle_struct *handle, return handle->conn->connectpath; } - fname = shadow_copy2_normalise_path(talloc_tos(), fname, gmt_start); + /* + * We have to create a real temporary context because we have + * to put our result on talloc_tos(). Thus we can't use a + * talloc_stackframe() here. + */ + tmp_ctx = talloc_new(talloc_tos()); + + fname = shadow_copy2_normalise_path(tmp_ctx, fname, gmt_start); if (fname == NULL) { TALLOC_FREE(tmp_ctx); return NULL; |