summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReginald McLean <rbmclean00@gmail.com>2020-11-24 19:42:54 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2023-05-16 12:32:35 +0100
commit05719c55ff6a8780d7d3b5ae5c55d81f981fe7b3 (patch)
tree42729fd831ce14eaa96c3bb62c1905016f466fff
parent86db1ad5dc9d878f463ac6c9d5ee412b62b74340 (diff)
downloadlibgit2-05719c55ff6a8780d7d3b5ae5c55d81f981fe7b3.tar.gz
Refactor git_worktree_is_prunable slightly to fix memory leak
-rw-r--r--src/libgit2/worktree.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/libgit2/worktree.c b/src/libgit2/worktree.c
index a8460380f..702b7b774 100644
--- a/src/libgit2/worktree.c
+++ b/src/libgit2/worktree.c
@@ -566,6 +566,7 @@ int git_worktree_is_prunable(git_worktree *wt,
{
git_worktree_prune_options popts = GIT_WORKTREE_PRUNE_OPTIONS_INIT;
git_buf path = GIT_BUF_INIT;
+ int ret = 0;
GIT_ERROR_CHECK_VERSION(
opts, GIT_WORKTREE_PRUNE_OPTIONS_VERSION,
@@ -576,35 +577,40 @@ int git_worktree_is_prunable(git_worktree *wt,
if ((popts.flags & GIT_WORKTREE_PRUNE_LOCKED) == 0) {
git_str reason = GIT_STR_INIT;
- int error;
- if ((error = git_worktree__is_locked(&reason, wt)) < 0)
- return error;
+ if ((ret = git_worktree_is_locked(&reason, wt)) < 0)
+ goto out;
- if (error) {
+ if (ret) {
if (!reason.size)
git_str_attach_notowned(&reason, "no reason given", 15);
git_error_set(GIT_ERROR_WORKTREE, "not pruning locked working tree: '%s'", reason.ptr);
git_str_dispose(&reason);
- return 0;
+ ret = 0;
+ goto out;
}
}
if ((popts.flags & GIT_WORKTREE_PRUNE_VALID) == 0 &&
git_worktree_validate(wt) == 0) {
git_error_set(GIT_ERROR_WORKTREE, "not pruning valid working tree");
- return 0;
+ goto out;
}
- if (git_buf_printf(&path, "%s/worktrees/%s", wt->commondir_path, wt->name) < 0)
- return 0;
+ if ((ret = git_buf_printf(&path, "%s/worktrees/%s", wt->commondir_path, wt->name) < 0))
+ goto out;
if (!git_path_exists(path.ptr))
{
git_error_set(GIT_ERROR_WORKTREE, "worktree gitdir '%s' does not exist", path.ptr);
- return 0;
+ goto out;
}
- return 1;
+ ret = 1;
+
+out:
+
+ git_buf_dispose(&path);
+ return ret;
}
int git_worktree_prune(git_worktree *wt,