packfile,delta: drop the cast_size_t_to_ulong() wrappers

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>
This commit is contained in:
Johannes Schindelin authored and Junio C Hamano committed 2026-06-15 07:45:41 -07:00
1 parent 188bac14f7
commit 7a3a78cc76
4 files changed
+13 -35

No files matched your search

+2 -12
View File
@@ -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
+8 -20
View 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;
+1 -1
View 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,
+2 -2
View 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;