Skip to content

Commit db6ffba

Browse files
PhilipOakleydscho
authored andcommitted
object-file.c: use size_t for header lengths
Continue walking the code path for the >4GB `hash-object --literally` test. The `hash_object_file_literally()` function internally uses both `hash_object_file()` and `write_object_file_prepare()`. Both function signatures use `unsigned long` rather than `size_t` for the mem buffer sizes. Use `size_t` instead, for LLP64 compatibility. While at it, convert those function's object's header buffer length to `size_t` for consistency. The value is already upcast to `uintmax_t` for print format compatibility. Note: The hash-object test still does not pass. A subsequent commit continues to walk the call tree's lower level hash functions to identify further fixes. Signed-off-by: Philip Oakley <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent e7ab111 commit db6ffba

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

object-file.c

+11-10
Original file line numberDiff line numberDiff line change
@@ -1788,7 +1788,7 @@ void *read_object_with_reference(struct repository *r,
17881788
static void hash_object_body(const struct git_hash_algo *algo, git_hash_ctx *c,
17891789
const void *buf, unsigned long len,
17901790
struct object_id *oid,
1791-
char *hdr, int *hdrlen)
1791+
char *hdr, size_t *hdrlen)
17921792
{
17931793
algo->init_fn(c);
17941794
algo->update_fn(c, hdr, *hdrlen);
@@ -1797,9 +1797,9 @@ static void hash_object_body(const struct git_hash_algo *algo, git_hash_ctx *c,
17971797
}
17981798

17991799
static void write_object_file_prepare(const struct git_hash_algo *algo,
1800-
const void *buf, unsigned long len,
1800+
const void *buf, size_t len,
18011801
enum object_type type, struct object_id *oid,
1802-
char *hdr, int *hdrlen)
1802+
char *hdr, size_t *hdrlen)
18031803
{
18041804
git_hash_ctx c;
18051805

@@ -1813,7 +1813,7 @@ static void write_object_file_prepare(const struct git_hash_algo *algo,
18131813
static void write_object_file_prepare_literally(const struct git_hash_algo *algo,
18141814
const void *buf, size_t len,
18151815
const char *type, struct object_id *oid,
1816-
char *hdr, int *hdrlen)
1816+
char *hdr, size_t *hdrlen)
18171817
{
18181818
git_hash_ctx c;
18191819

@@ -1872,17 +1872,17 @@ static int write_buffer(int fd, const void *buf, size_t len)
18721872
}
18731873

18741874
static void hash_object_file_literally(const struct git_hash_algo *algo,
1875-
const void *buf, unsigned long len,
1875+
const void *buf, size_t len,
18761876
const char *type, struct object_id *oid)
18771877
{
18781878
char hdr[MAX_HEADER_LEN];
1879-
int hdrlen = sizeof(hdr);
1879+
size_t hdrlen = sizeof(hdr);
18801880

18811881
write_object_file_prepare_literally(algo, buf, len, type, oid, hdr, &hdrlen);
18821882
}
18831883

18841884
void hash_object_file(const struct git_hash_algo *algo, const void *buf,
1885-
unsigned long len, enum object_type type,
1885+
size_t len, enum object_type type,
18861886
struct object_id *oid)
18871887
{
18881888
hash_object_file_literally(algo, buf, len, type_name(type), oid);
@@ -2224,12 +2224,12 @@ int stream_loose_object(struct input_stream *in_stream, size_t len,
22242224
return err;
22252225
}
22262226

2227-
int write_object_file_flags(const void *buf, unsigned long len,
2227+
int write_object_file_flags(const void *buf, size_t len,
22282228
enum object_type type, struct object_id *oid,
22292229
unsigned flags)
22302230
{
22312231
char hdr[MAX_HEADER_LEN];
2232-
int hdrlen = sizeof(hdr);
2232+
size_t hdrlen = sizeof(hdr);
22332233

22342234
/* Normally if we have it in the pack then we do not bother writing
22352235
* it out into .git/objects/??/?{38} file.
@@ -2246,7 +2246,8 @@ int write_object_file_literally(const void *buf, size_t len,
22462246
unsigned flags)
22472247
{
22482248
char *header;
2249-
int hdrlen, status = 0;
2249+
size_t hdrlen;
2250+
int status = 0;
22502251

22512252
/* type string, SP, %lu of the length plus NUL must fit this */
22522253
hdrlen = strlen(type) + MAX_HEADER_LEN;

object-store.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,10 @@ static inline void *repo_read_object_file(struct repository *r,
260260
int oid_object_info(struct repository *r, const struct object_id *, unsigned long *);
261261

262262
void hash_object_file(const struct git_hash_algo *algo, const void *buf,
263-
unsigned long len, enum object_type type,
263+
size_t len, enum object_type type,
264264
struct object_id *oid);
265265

266-
int write_object_file_flags(const void *buf, unsigned long len,
266+
int write_object_file_flags(const void *buf, size_t len,
267267
enum object_type type, struct object_id *oid,
268268
unsigned flags);
269269
static inline int write_object_file(const void *buf, unsigned long len,

0 commit comments

Comments
 (0)