From 5d6b151fdd0a9e41ba68b444760616da1a008433 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Thu, 28 Dec 2006 17:13:33 +0100 Subject: xdl_merge(): fix a segmentation fault when refining conflicts The function xdl_refine_conflicts() tries to break down huge conflicts by doing a diff on the conflicting regions. However, this does not make sense when one side is empty. Worse, when one side is not only empty, but after EOF, the code accessed unmapped memory. Noticed by Luben Tuikov, Shawn Pearce and Alexandre Julliard, the latter providing a test case. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- xdiff/xmerge.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'xdiff/xmerge.c') diff --git a/xdiff/xmerge.c b/xdiff/xmerge.c index 352207e51..294450b89 100644 --- a/xdiff/xmerge.c +++ b/xdiff/xmerge.c @@ -190,6 +190,10 @@ static int xdl_refine_conflicts(xdfenv_t *xe1, xdfenv_t *xe2, xdmerge_t *m, if (m->mode) continue; + /* no sense refining a conflict when one side is empty */ + if (m->chg1 == 0 || m->chg2 == 0) + continue; + /* * This probably does not work outside git, since * we have a very simple mmfile structure. -- cgit v1.2.1