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:
1 parent
188bac14f7
commit
7a3a78cc76
4 files changed
+13
-35
No files matched your search
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user