From 5cd6978a9cfef58de061a9525f3678ade479564d Mon Sep 17 00:00:00 2001 From: Ramsay Jones Date: Fri, 4 Mar 2016 23:09:36 +0000 Subject: [PATCH 1/2] xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits Commit 307ab20b3 ("xdiff: PATIENCE/HISTOGRAM are not independent option bits", 19-02-2012) introduced the XDF_DIFF_ALG() macro to access the flag bits used to represent the diff algorithm requested. In addition, code which had used explicit manipulation of the flag bits was changed to use the macros. However, one example of direct manipulation remains. Update this code to use the XDF_DIFF_ALG() macro. Signed-off-by: Ramsay Jones Signed-off-by: Junio C Hamano --- xdiff/xprepare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c index 63a22c630e..5ffcf996f0 100644 --- a/xdiff/xprepare.c +++ b/xdiff/xprepare.c @@ -304,7 +304,7 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, return -1; } - if (!(xpp->flags & XDF_HISTOGRAM_DIFF)) + if (XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF) xdl_free_classifier(&cf); return 0; From 87f16258367a3b9a62663b11f898a4a6f3c19d31 Mon Sep 17 00:00:00 2001 From: Ramsay Jones Date: Fri, 4 Mar 2016 23:10:50 +0000 Subject: [PATCH 2/2] xdiff/xprepare: fix a memory leak The xdl_prepare_env() function may initialise an xdlclassifier_t data structure via xdl_init_classifier(), which allocates memory to several fields, for example 'rchash', 'rcrecs' and 'ncha'. If this function later exits due to the failure of xdl_optimize_ctxs(), then this xdlclassifier_t structure, and the memory allocated to it, is not cleaned up. In order to fix the memory leak, insert a call to xdl_free_classifier() before returning. Signed-off-by: Ramsay Jones Signed-off-by: Junio C Hamano --- xdiff/xprepare.c | 1 + 1 file changed, 1 insertion(+) diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c index 5ffcf996f0..13b55aba74 100644 --- a/xdiff/xprepare.c +++ b/xdiff/xprepare.c @@ -301,6 +301,7 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xdl_free_ctx(&xe->xdf2); xdl_free_ctx(&xe->xdf1); + xdl_free_classifier(&cf); return -1; }