On 14/10/18 03:52, Jeff King wrote: > On Sun, Oct 14, 2018 at 03:16:36AM +0100, Ramsay Jones wrote: > >> diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c >> index b059b86aee..3b5f2c38b3 100644 >> --- a/builtin/pack-objects.c >> +++ b/builtin/pack-objects.c >> @@ -269,12 +269,12 @@ static void copy_pack_data(struct hashfile *f, >> off_t len) >> { >> unsigned char *in; >> - unsigned long avail; >> + size_t avail; >> >> while (len) { >> in = use_pack(p, w_curs, offset, &avail); >> if (avail > len) >> - avail = (unsigned long)len; >> + avail = xsize_t(len); > > We don't actually care about truncation here. The idea is that we take a > bite-sized chunk via use_pack, and loop as necessary. So mod-2^32 > truncation via a cast would be bad (we might not make forward progress), > but truncating to SIZE_MAX would be fine. > > That said, we know that would not truncate here, because we must > strictly be shrinking "avail", which was already a size_t (unless "len" > is negative, but then we are really screwed ;) ). > > So I kind of wonder if a comment would be better than xsize_t here. > Something like: > > if (avail > len) { > /* > * This can never truncate because we know that len is smaller > * than avail, which is already a size_t. > */ > avail = (size_t)len; > } Heh, you are, of course, correct! (that will learn me[1]). :-D Hmm, let's see if I can muster the enthusiasm to do all that testing again! ATB, Ramsay Jones [1] Since I started with my patch, when I had finished 'paring it back', the result didn't have this xsize_t() call. In order to make the result 'v2 + SZEDER's patch' (which I thought was quite neat) I added this call right at the end. :-P