From: Jeff King <p...@peff.net>

Signed-off-by: Ramsay Jones <ram...@ramsayjones.plus.com>
---

Hi Jeff,

I recently tried (yet again) to tidy up some old branches. When I get
around to doing a 'git gc; git fsck' I always take a quick look at
the 'dangling' commits, just before a 'git gc --prune=now'.

I had no recollection of this commit, from last October, but a quick
look at the ML archive found this [1] discussion. I obviously thought
it was worth saving this thought of yours. ;-) So, having deleted this
already, I did a quick 'format-patch' to see if anyone thinks it is
worth applying.

[1] https://public-inbox.org/git/20181013024624.gb15...@sigill.intra.peff.net/#t

Thanks!

ATB,
Ramsay Jones


 packfile.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/packfile.c b/packfile.c
index 013294aec7..2f81ec9345 100644
--- a/packfile.c
+++ b/packfile.c
@@ -588,6 +588,7 @@ unsigned char *use_pack(struct packed_git *p,
                size_t *left)
 {
        struct pack_window *win = *w_cursor;
+       size_t offset_in_window;
 
        /* Since packfiles end in a hash of their content and it's
         * pointless to ask for an offset into the middle of that
@@ -649,10 +650,14 @@ unsigned char *use_pack(struct packed_git *p,
                win->inuse_cnt++;
                *w_cursor = win;
        }
-       offset -= win->offset;
+       /*
+        * We know this difference will fit in a size_t, because our mmap
+        * window by definition can be no larger than a size_t.
+        */
+       offset_in_window = xsize_t(offset - win->offset);
        if (left)
-               *left = win->len - xsize_t(offset);
-       return win->base + offset;
+               *left = win->len - offset_in_window;
+       return win->base + offset_in_window;
 }
 
 void unuse_pack(struct pack_window **w_cursor)
-- 
2.21.0

Reply via email to