summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-03-10 11:13:49 -0800
committerJunio C Hamano <gitster@pobox.com>2016-03-10 11:13:49 -0800
commit4da402695d2998b4735dd219b03848b47d2389cf (patch)
treed1b7fe94cf64f1903e04b4b5d1658f0788402c8b
parent08e21c9b5f3996152080ff22d33d9d2866a3dc26 (diff)
parent4867f1184c943f7738bb7b42cab2e62cf16cdb18 (diff)
downloadgit-4da402695d2998b4735dd219b03848b47d2389cf.tar.gz
Merge branch 'ps/plug-xdl-merge-leak' into maint
* ps/plug-xdl-merge-leak: xdiff/xmerge: fix memory leak in xdl_merge
-rw-r--r--xdiff/xmerge.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/xdiff/xmerge.c b/xdiff/xmerge.c
index d98f430c91..f338ad6c75 100644
--- a/xdiff/xmerge.c
+++ b/xdiff/xmerge.c
@@ -641,8 +641,11 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
result->ptr = NULL;
result->size = 0;
- if (xdl_do_diff(orig, mf1, xpp, &xe1) < 0 ||
- xdl_do_diff(orig, mf2, xpp, &xe2) < 0) {
+ if (xdl_do_diff(orig, mf1, xpp, &xe1) < 0) {
+ return -1;
+ }
+ if (xdl_do_diff(orig, mf2, xpp, &xe2) < 0) {
+ xdl_free_env(&xe1);
return -1;
}
if (xdl_change_compact(&xe1.xdf1, &xe1.xdf2, xpp->flags) < 0 ||
@@ -654,6 +657,8 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
if (xdl_change_compact(&xe2.xdf1, &xe2.xdf2, xpp->flags) < 0 ||
xdl_change_compact(&xe2.xdf2, &xe2.xdf1, xpp->flags) < 0 ||
xdl_build_script(&xe2, &xscr2) < 0) {
+ xdl_free_script(xscr1);
+ xdl_free_env(&xe1);
xdl_free_env(&xe2);
return -1;
}