mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-11 15:37:23 +00:00
diff: make sure we free all allocated resources
When the creation of one iterator fails, we need to free the prefix and possibly one of the iterators. Make sure we do so.
This commit is contained in:
parent
c06e000394
commit
1d94a7d0f6
27
src/diff.c
27
src/diff.c
@ -704,12 +704,17 @@ int git_diff_index_to_tree(
|
|||||||
assert(repo && diff);
|
assert(repo && diff);
|
||||||
|
|
||||||
if (git_iterator_for_tree_range(&a, repo, old_tree, prefix, prefix) < 0 ||
|
if (git_iterator_for_tree_range(&a, repo, old_tree, prefix, prefix) < 0 ||
|
||||||
git_iterator_for_index_range(&b, repo, prefix, prefix) < 0)
|
git_iterator_for_index_range(&b, repo, prefix, prefix) < 0)
|
||||||
return -1;
|
goto on_error;
|
||||||
|
|
||||||
git__free(prefix);
|
git__free(prefix);
|
||||||
|
|
||||||
return diff_from_iterators(repo, opts, a, b, diff);
|
return diff_from_iterators(repo, opts, a, b, diff);
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
git__free(prefix);
|
||||||
|
git_iterator_free(a);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int git_diff_workdir_to_index(
|
int git_diff_workdir_to_index(
|
||||||
@ -723,12 +728,17 @@ int git_diff_workdir_to_index(
|
|||||||
assert(repo && diff);
|
assert(repo && diff);
|
||||||
|
|
||||||
if (git_iterator_for_index_range(&a, repo, prefix, prefix) < 0 ||
|
if (git_iterator_for_index_range(&a, repo, prefix, prefix) < 0 ||
|
||||||
git_iterator_for_workdir_range(&b, repo, prefix, prefix) < 0)
|
git_iterator_for_workdir_range(&b, repo, prefix, prefix) < 0)
|
||||||
return -1;
|
goto on_error;
|
||||||
|
|
||||||
git__free(prefix);
|
git__free(prefix);
|
||||||
|
|
||||||
return diff_from_iterators(repo, opts, a, b, diff);
|
return diff_from_iterators(repo, opts, a, b, diff);
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
git__free(prefix);
|
||||||
|
git_iterator_free(a);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -744,12 +754,17 @@ int git_diff_workdir_to_tree(
|
|||||||
assert(repo && old_tree && diff);
|
assert(repo && old_tree && diff);
|
||||||
|
|
||||||
if (git_iterator_for_tree_range(&a, repo, old_tree, prefix, prefix) < 0 ||
|
if (git_iterator_for_tree_range(&a, repo, old_tree, prefix, prefix) < 0 ||
|
||||||
git_iterator_for_workdir_range(&b, repo, prefix, prefix) < 0)
|
git_iterator_for_workdir_range(&b, repo, prefix, prefix) < 0)
|
||||||
return -1;
|
goto on_error;
|
||||||
|
|
||||||
git__free(prefix);
|
git__free(prefix);
|
||||||
|
|
||||||
return diff_from_iterators(repo, opts, a, b, diff);
|
return diff_from_iterators(repo, opts, a, b, diff);
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
git__free(prefix);
|
||||||
|
git_iterator_free(a);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int git_diff_merge(
|
int git_diff_merge(
|
||||||
|
Loading…
Reference in New Issue
Block a user