]> git.ipfire.org Git - thirdparty/git.git/commitdiff
packfile,delta: drop the `cast_size_t_to_ulong()` wrappers
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 15 Jun 2026 11:52:28 +0000 (11:52 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Jun 2026 14:45:41 +0000 (07:45 -0700)
When I started the transition from `unsigned long` to `size_t`, in the
interest of keeping the patches reviewable, I introduced these calls to
prevent data type narrowing from silently failing to handle large object
sizes. I also introduced `*_sz()` variants that would allow most of the
callers to keep using that `unsigned long` that the 90s kindly asked to
be returned.

After the preceding commits, the only places that called the narrow
wrappers either no longer exist or already use the `_sz` form
internally, so the wrappers just narrow values back through
`cast_size_t_to_ulong()` for no reason.

Drop them and rename the `_sz` variants back to the natural names.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
delta.h
packfile.c
packfile.h
patch-delta.c

diff --git a/delta.h b/delta.h
index bb149dc82b912f815b20d4ea132117c0a9c34ee4..eb5c6d2fdb9c5124e046ebc558d529b0d41c7bde 100644 (file)
--- a/delta.h
+++ b/delta.h
@@ -86,11 +86,8 @@ void *patch_delta(const void *src_buf, size_t src_size,
  * This must be called twice on the delta data buffer, first to get the
  * expected source buffer size, and again to get the target buffer size.
  */
-/*
- * Size_t variant that doesn't truncate - use for >4GB objects on Windows.
- */
-static inline size_t get_delta_hdr_size_sz(const unsigned char **datap,
-                                          const unsigned char *top)
+static inline size_t get_delta_hdr_size(const unsigned char **datap,
+                                       const unsigned char *top)
 {
        const unsigned char *data = *datap;
        size_t cmd, size = 0;
@@ -104,11 +101,4 @@ static inline size_t get_delta_hdr_size_sz(const unsigned char **datap,
        return size;
 }
 
-static inline unsigned long get_delta_hdr_size(const unsigned char **datap,
-                                              const unsigned char *top)
-{
-       size_t size = get_delta_hdr_size_sz(datap, top);
-       return cast_size_t_to_ulong(size);
-}
-
 #endif
index dab0a9b16d139fe3474b1c744f3af6455d597fa9..c174982d10e79dae7d7d5d967cff65c7e3df3e5a 100644 (file)
@@ -1164,11 +1164,12 @@ unsigned long unpack_object_header_buffer(const unsigned char *buf,
 }
 
 /*
- * Size_t variant for >4GB delta results on Windows.
+ * Read a delta object's header at curpos in p (already inflated as needed)
+ * and return the size of the result object (the post-application target).
  */
-static size_t get_size_from_delta_sz(struct packed_git *p,
-                                    struct pack_window **w_curs,
-                                    off_t curpos)
+size_t get_size_from_delta(struct packed_git *p,
+                          struct pack_window **w_curs,
+                          off_t curpos)
 {
        const unsigned char *data;
        unsigned char delta_head[20], *in;
@@ -1215,18 +1216,10 @@ static size_t get_size_from_delta_sz(struct packed_git *p,
        data = delta_head;
 
        /* ignore base size */
-       get_delta_hdr_size_sz(&data, delta_head+sizeof(delta_head));
+       get_delta_hdr_size(&data, delta_head+sizeof(delta_head));
 
        /* Read the result size */
-       return get_delta_hdr_size_sz(&data, delta_head+sizeof(delta_head));
-}
-
-unsigned long get_size_from_delta(struct packed_git *p,
-                                 struct pack_window **w_curs,
-                                 off_t curpos)
-{
-       size_t size = get_size_from_delta_sz(p, w_curs, curpos);
-       return cast_size_t_to_ulong(size);
+       return get_delta_hdr_size(&data, delta_head+sizeof(delta_head));
 }
 
 int unpack_object_header(struct packed_git *p,
@@ -1634,12 +1627,7 @@ static int packed_object_info_with_index_pos(struct packed_git *p, off_t obj_off
                                ret = -1;
                                goto out;
                        }
-                       /*
-                        * Use size_t variant to avoid die() on >4GB deltas.
-                        * oi->sizep is unsigned long, so truncation may occur,
-                        * but streaming code uses its own size_t tracking.
-                        */
-                       size = get_size_from_delta_sz(p, &w_curs, tmp_pos);
+                       size = get_size_from_delta(p, &w_curs, tmp_pos);
                        if (size == 0) {
                                ret = -1;
                                goto out;
index 0b5ae3f9fcf3b36e68fb047b6ebcc53e43754595..bd4494906d2fc6ac89d03ea09338cd65aa8f4079 100644 (file)
@@ -458,7 +458,7 @@ int is_pack_valid(struct packed_git *);
 void *unpack_entry(struct repository *r, struct packed_git *, off_t,
                   enum object_type *, size_t *);
 unsigned long unpack_object_header_buffer(const unsigned char *buf, unsigned long len, enum object_type *type, size_t *sizep);
-unsigned long get_size_from_delta(struct packed_git *, struct pack_window **, off_t);
+size_t get_size_from_delta(struct packed_git *, struct pack_window **, off_t);
 int unpack_object_header(struct packed_git *, struct pack_window **, off_t *, size_t *);
 off_t get_delta_base(struct packed_git *p, struct pack_window **w_curs,
                     off_t *curpos, enum object_type type,
index 44cda97994485e53863b271e7f157239b8fc3bdd..42199fa95625d8f20032dd9507aea995197c0182 100644 (file)
@@ -27,12 +27,12 @@ void *patch_delta(const void *src_buf, size_t src_size,
        top = (const unsigned char *) delta_buf + delta_size;
 
        /* make sure the orig file size matches what we expect */
-       size = get_delta_hdr_size_sz(&data, top);
+       size = get_delta_hdr_size(&data, top);
        if (size != src_size)
                return NULL;
 
        /* now the result size */
-       size = get_delta_hdr_size_sz(&data, top);
+       size = get_delta_hdr_size(&data, top);
        dst_buf = xmallocz(size);
 
        out = dst_buf;