diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2015-06-26 18:31:39 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2015-06-26 18:31:39 +0200 |
commit | 9568660f626e314651d550ed8a06ac17e750a02d (patch) | |
tree | cbbde77724713f62c7f61014d8a1e6d8f7b7e617 | |
parent | 354268ca488fc89346d5874b446510f0cc89c007 (diff) | |
download | libgit2-9568660f626e314651d550ed8a06ac17e750a02d.tar.gz |
diff: fix leaks in diff printing
-rw-r--r-- | src/diff_patch.c | 10 | ||||
-rw-r--r-- | src/diff_print.c | 3 | ||||
-rw-r--r-- | tests/diff/binary.c | 6 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/diff_patch.c b/src/diff_patch.c index ec4979a52..0628da6f2 100644 --- a/src/diff_patch.c +++ b/src/diff_patch.c @@ -325,9 +325,14 @@ static int diff_binary(git_diff_output *output, git_patch *patch) old_data, old_len, new_data, new_len)) < 0) return error; - return giterr_set_after_callback_function( + error = giterr_set_after_callback_function( output->binary_cb(patch->delta, &binary, output->payload), "git_patch"); + + git__free((char *) binary.old_file.data); + git__free((char *) binary.new_file.data); + + return error; } static int diff_patch_generate(git_patch *patch, git_diff_output *output) @@ -377,6 +382,9 @@ static void diff_patch_free(git_patch *patch) git__free((char *)patch->diff_opts.old_prefix); git__free((char *)patch->diff_opts.new_prefix); + git__free((char *)patch->binary.old_file.data); + git__free((char *)patch->binary.new_file.data); + if (patch->flags & GIT_DIFF_PATCH_ALLOCATED) git__free(patch); } diff --git a/src/diff_print.c b/src/diff_print.c index c58698368..546488c2f 100644 --- a/src/diff_print.c +++ b/src/diff_print.c @@ -578,6 +578,9 @@ int git_diff_print( giterr_set_after_callback_function(error, "git_diff_print"); } + git__free(pi.nfile); + git__free(pi.ofile); + git_buf_free(&buf); return error; diff --git a/tests/diff/binary.c b/tests/diff/binary.c index 6a5f3907b..3a5716800 100644 --- a/tests/diff/binary.c +++ b/tests/diff/binary.c @@ -4,6 +4,7 @@ #include "buffer.h" #include "filebuf.h" +#include "repository.h" static git_repository *repo; @@ -497,7 +498,7 @@ void test_diff_binary__blob_to_blob(void) opts.id_abbrev = GIT_OID_HEXSZ; repo = cl_git_sandbox_init("renames"); - cl_git_pass(git_repository_index(&index, repo)); + cl_git_pass(git_repository_index__weakptr(&index, repo)); cl_git_append2file("renames/untimely.txt", "Oh that crazy Kipling!\r\n"); cl_git_pass(git_index_add_bypath(index, "untimely.txt")); @@ -532,4 +533,7 @@ void test_diff_binary__blob_to_blob(void) git__free(diff_data.old_path); git__free(diff_data.new_path); + + git_buf_free(&diff_data.old_binary_base85); + git_buf_free(&diff_data.new_binary_base85); } |