Commit dca6b228 by Michael Schubert

notes: fix memory leaks

parent 9311423c
...@@ -56,7 +56,7 @@ static int find_subtree_r(git_tree **out, git_tree *root, ...@@ -56,7 +56,7 @@ static int find_subtree_r(git_tree **out, git_tree *root,
error = find_subtree_in_current_level(&subtree, repo, root, target, *fanout); error = find_subtree_in_current_level(&subtree, repo, root, target, *fanout);
if (error == GIT_EEXISTS) { if (error == GIT_EEXISTS) {
return git_tree_lookup(out, repo, git_object_id((const git_object *)root)); return git_tree_lookup(out, repo, git_tree_id(root));
} }
if (error < 0) if (error < 0)
...@@ -64,13 +64,7 @@ static int find_subtree_r(git_tree **out, git_tree *root, ...@@ -64,13 +64,7 @@ static int find_subtree_r(git_tree **out, git_tree *root,
*fanout += 2; *fanout += 2;
error = find_subtree_r(out, subtree, repo, target, fanout); error = find_subtree_r(out, subtree, repo, target, fanout);
git_tree_free(subtree);
/*
* root is not ours to free, and the last subtree is the
* one being returned => we only need to free the subtrees in-between
*/
if (*out != subtree)
git_tree_free(subtree);
return error; return error;
} }
...@@ -153,7 +147,7 @@ static int manipulate_note_in_tree_r( ...@@ -153,7 +147,7 @@ static int manipulate_note_in_tree_r(
int current_error)) int current_error))
{ {
int error = -1; int error = -1;
git_tree *subtree = NULL; git_tree *subtree = NULL, *new = NULL;
char subtree_name[3]; char subtree_name[3];
error = find_subtree_in_current_level( error = find_subtree_in_current_level(
...@@ -176,7 +170,7 @@ static int manipulate_note_in_tree_r( ...@@ -176,7 +170,7 @@ static int manipulate_note_in_tree_r(
/* An existing fanout has been found, let's dig deeper */ /* An existing fanout has been found, let's dig deeper */
error = manipulate_note_in_tree_r( error = manipulate_note_in_tree_r(
out, repo, subtree, note_oid, annotated_object_sha, &new, repo, subtree, note_oid, annotated_object_sha,
fanout + 2, note_exists_cb, note_notfound_cb); fanout + 2, note_exists_cb, note_notfound_cb);
if (error < 0) if (error < 0)
...@@ -185,10 +179,12 @@ static int manipulate_note_in_tree_r( ...@@ -185,10 +179,12 @@ static int manipulate_note_in_tree_r(
strncpy(subtree_name, annotated_object_sha + fanout, 2); strncpy(subtree_name, annotated_object_sha + fanout, 2);
subtree_name[2] = '\0'; subtree_name[2] = '\0';
error = tree_write(out, repo, parent, error = tree_write(out, repo, parent, git_tree_id(new),
git_object_id((const git_object *)(*out)), subtree_name, 0040000); subtree_name, 0040000);
cleanup: cleanup:
git_tree_free(new);
git_tree_free(subtree); git_tree_free(subtree);
return error; return error;
} }
......
...@@ -23,6 +23,8 @@ static void assert_note_equal(git_note *note, char *message, git_oid *note_oid) ...@@ -23,6 +23,8 @@ static void assert_note_equal(git_note *note, char *message, git_oid *note_oid)
cl_git_pass(git_blob_lookup(&blob, _repo, note_oid)); cl_git_pass(git_blob_lookup(&blob, _repo, note_oid));
cl_assert_equal_s(git_note_message(note), (const char *)git_blob_rawcontent(blob)); cl_assert_equal_s(git_note_message(note), (const char *)git_blob_rawcontent(blob));
git_blob_free(blob);
} }
static void create_note(git_oid *note_oid, const char *canonical_namespace, const char *target_sha, const char *message) static void create_note(git_oid *note_oid, const char *canonical_namespace, const char *target_sha, const char *message)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment