From: Junio C Hamano Date: Thu, 10 Mar 2016 19:13:49 +0000 (-0800) Subject: Merge branch 'ps/plug-xdl-merge-leak' into maint X-Git-Tag: v2.7.3~3 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/4da402695d2998b4735dd219b03848b47d2389cf?hp=08e21c9b5f3996152080ff22d33d9d2866a3dc26 Merge branch 'ps/plug-xdl-merge-leak' into maint * ps/plug-xdl-merge-leak: xdiff/xmerge: fix memory leak in xdl_merge --- 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; }