diff options
author | Patrick Steinhardt <ps@pks.im> | 2016-03-01 08:54:00 +0100 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2016-03-01 08:56:23 +0100 |
commit | a4ea7faaad52dd1be7ba6daaccd789bed3f01d61 (patch) | |
tree | 9d97796d7b31cd92e7493be8f5d3f142641a52eb | |
parent | dbee683553ef4c43273b24ebc503d424c46c01f1 (diff) | |
download | libgit2-a4ea7faaad52dd1be7ba6daaccd789bed3f01d61.tar.gz |
xdiff: fix memleak on error case
Commit 3d1abc5afce fixes a memory leak in the xdiff code. In the
process of upstreaming the fix it was pointed out by Johannes
Schindelin that there is another memory leak present (see [1]).
Fix the second memory leak by applying the upstream fix to our
code base.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/287034
-rw-r--r-- | src/xdiff/xmerge.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/xdiff/xmerge.c b/src/xdiff/xmerge.c index 7928d1418..6448b5542 100644 --- a/src/xdiff/xmerge.c +++ b/src/xdiff/xmerge.c @@ -633,8 +633,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 || |