Skip to content

Commit 044fb19

Browse files
dschogitster
authored andcommitted
diff: fix a double off-by-one with --ignore-space-at-eol
When comparing two lines, ignoring any whitespace at the end, we first try to match as many bytes as possible and break out of the loop only upon mismatch, to let the remainder be handled by the code shared with the other whitespace-ignoring code paths. When comparing the bytes, however, we incremented the counters always, even if the bytes did not match. And because we fall through to the space-at-eol handling at that point, it is as if that mismatch never happened. Signed-off-by: Johannes Schindelin <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent a5229cc commit 044fb19

File tree

3 files changed

+6
-4
lines changed

3 files changed

+6
-4
lines changed

t/t4033-diff-patience.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ test_description='patience diff algorithm'
55
. ./test-lib.sh
66
. "$TEST_DIRECTORY"/lib-diff-alternative.sh
77

8-
test_expect_failure '--ignore-space-at-eol with a single appended character' '
8+
test_expect_success '--ignore-space-at-eol with a single appended character' '
99
printf "a\nb\nc\n" >pre &&
1010
printf "a\nbX\nc\n" >post &&
1111
test_must_fail git diff --no-index \

xdiff/xpatience.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* LibXDiff by Davide Libenzi ( File Differential Library )
3-
* Copyright (C) 2003-2009 Davide Libenzi, Johannes E. Schindelin
3+
* Copyright (C) 2003-2016 Davide Libenzi, Johannes E. Schindelin
44
*
55
* This library is free software; you can redistribute it and/or
66
* modify it under the terms of the GNU Lesser General Public

xdiff/xutils.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,10 @@ int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags)
200200
return 0;
201201
}
202202
} else if (flags & XDF_IGNORE_WHITESPACE_AT_EOL) {
203-
while (i1 < s1 && i2 < s2 && l1[i1++] == l2[i2++])
204-
; /* keep going */
203+
while (i1 < s1 && i2 < s2 && l1[i1] == l2[i2]) {
204+
i1++;
205+
i2++;
206+
}
205207
}
206208

207209
/*

0 commit comments

Comments
 (0)