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; } -Peff