From 1bce14874f1febe8c11bb2691210dd3c5eb6ca53 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Thu, 31 Mar 2016 11:30:31 +0200 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. This patch was originally written by Ramsay Jones (see commit 5cd6978a9cfef58de061a9525f3678ade479564d in git.git). --- src/xdiff/xprepare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xdiff/xprepare.c b/src/xdiff/xprepare.c index 63a22c630..ffb70df49 100644 --- a/src/xdiff/xprepare.c +++ b/src/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 6045afd39807b320013067858ed37adee9c0fc0d Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Thu, 31 Mar 2016 11:32:36 +0200 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. This patch was originally written by Ramsay Jones (see commit 87f16258367a3b9a62663b11f898a4a6f3c19d31 in git.git). --- src/xdiff/xprepare.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/xdiff/xprepare.c b/src/xdiff/xprepare.c index ffb70df49..3183d50eb 100644 --- a/src/xdiff/xprepare.c +++ b/src/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; }