Merge branch 'rs/xdiff-context-length-fix'
The xdiff code on 32-bit platform misbehaved when an insanely large context size is given, which has been corrected. * rs/xdiff-context-length-fix: xdiff: avoid arithmetic overflow in xdl_get_hunk()maint
commit
6767149eca
|
@ -89,4 +89,14 @@ test_expect_success '-U0 is valid, so is diff.context=0' '
|
||||||
grep "^+MODIFIED" output
|
grep "^+MODIFIED" output
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '-U2147483647 works' '
|
||||||
|
echo APPENDED >>x &&
|
||||||
|
test_line_count = 16 x &&
|
||||||
|
git diff -U2147483647 >output &&
|
||||||
|
test_line_count = 22 output &&
|
||||||
|
grep "^-ADDED" output &&
|
||||||
|
grep "^+MODIFIED" output &&
|
||||||
|
grep "^+APPENDED" output
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
|
@ -43,6 +43,10 @@ static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static long saturating_add(long a, long b)
|
||||||
|
{
|
||||||
|
return signed_add_overflows(a, b) ? LONG_MAX : a + b;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Starting at the passed change atom, find the latest change atom to be included
|
* Starting at the passed change atom, find the latest change atom to be included
|
||||||
|
@ -52,7 +56,9 @@ static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *
|
||||||
xdchange_t *xdl_get_hunk(xdchange_t **xscr, xdemitconf_t const *xecfg)
|
xdchange_t *xdl_get_hunk(xdchange_t **xscr, xdemitconf_t const *xecfg)
|
||||||
{
|
{
|
||||||
xdchange_t *xch, *xchp, *lxch;
|
xdchange_t *xch, *xchp, *lxch;
|
||||||
long max_common = 2 * xecfg->ctxlen + xecfg->interhunkctxlen;
|
long max_common = saturating_add(saturating_add(xecfg->ctxlen,
|
||||||
|
xecfg->ctxlen),
|
||||||
|
xecfg->interhunkctxlen);
|
||||||
long max_ignorable = xecfg->ctxlen;
|
long max_ignorable = xecfg->ctxlen;
|
||||||
long ignored = 0; /* number of ignored blank lines */
|
long ignored = 0; /* number of ignored blank lines */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue