From: Jason Cho Date: Wed, 12 Mar 2025 15:51:02 GMT Subject: Iffy output given git diff --unified=2147483647 Message-ID: In-Reply-To: > $ git --versiongit version 2.47.0.windows.2 > > $ git diff --unified=2147483647 1.txt 2.txt > diff --git a/1.txt b/2.txt > index e53eaa1..1130481 100644 > --- a/1.txt > +++ b/2.txt > @@ -1,10 +1,10 @@ >  1 > -2 > +a >  3 >  4 >  5 >  6 >  7 >  8 >  a >  0 > @@ -1,10 +1,10 @@ >  1 >  a >  3 >  4 >  5 >  6 >  7 >  8 > -9 > +a >  0 > > $ git diff --unified=3 1.txt 2.txt > diff --git a/1.txt b/2.txt > index e53eaa1..1130481 100644 > --- a/1.txt > +++ b/2.txt > @@ -1,10 +1,10 @@ >  1 > -2 > +a >  3 >  4 >  5 >  6 >  7 >  8 > -9 > +a >  0 > > $ diff --version > diff (GNU diffutils) 3.10 > Copyright (C) 2023 Free Software Foundation, Inc. > License GPLv3+: GNU GPL version 3 or later . > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. > > Written by Paul Eggert, Mike Haertel, David Hayes, > Richard Stallman, and Len Tower. > > $ diff  --unified=2147483647 1.txt 2.txt > --- 1.txt       2025-03-12 16:04:06.947099900 +0100 > +++ 2.txt       2025-03-12 16:04:27.131732400 +0100 > @@ -1,10 +1,10 @@ >  1 > -2 > +a >  3 >  4 >  5 >  6 >  7 >  8 > -9 > +a >  0 Please see the above command line output. I run this on Windows with git for windows, but the problem should apply for other platforms. The version of my git is 2.47. I prepare two files, I run GNU diff  --unified=2147483647 1.txt 2.txt, the output is correct. Then I run git diff with --unified=2147483647, the context of the second hunk is repeated, which is unexpected. I investigated it and found the repetition is due to an overflow issue in   xdiff/xemit.c. > xdchange_t *xdl_get_hunk(xdchange_t **xscr, xdemitconf_t const *xecfg){ > xdchange_t *xch, *xchp, *lxch; > long max_common = 2 * xecfg->ctxlen + xecfg->interhunkctxlen;  <- ---- > ... > } The documentation https://git-scm.com/docs/git-diff doesn't say the range of --unified. Even if its max value is INT_MAX, 2147483647 is in the range. Can you guys clarify the correct range of --unified? If my value 2147483647 is in range, git diff should output a diff without the strange repetition. Please fix it.