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 <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Philip Oakley
2021-11-12 21:14:50 +00:00
committed by Victoria Dye
parent 67deefb0c7
commit 7c1c8e4d1d
2 changed files with 10 additions and 9 deletions

View File

@@ -1770,9 +1770,9 @@ void *read_object_with_reference(struct repository *r,
}
static void write_object_file_prepare(const struct git_hash_algo *algo,
const void *buf, unsigned long len,
const void *buf, size_t len,
const char *type, struct object_id *oid,
char *hdr, int *hdrlen)
char *hdr, size_t *hdrlen)
{
git_hash_ctx c;
@@ -1837,11 +1837,11 @@ static int write_buffer(int fd, const void *buf, size_t len)
}
int hash_object_file(const struct git_hash_algo *algo, const void *buf,
unsigned long len, const char *type,
size_t len, const char *type,
struct object_id *oid)
{
char hdr[MAX_HEADER_LEN];
int hdrlen = sizeof(hdr);
size_t hdrlen = sizeof(hdr);
write_object_file_prepare(algo, buf, len, type, oid, hdr, &hdrlen);
return 0;
}
@@ -2007,12 +2007,12 @@ static int freshen_packed_object(const struct object_id *oid)
return 1;
}
int write_object_file_flags(const void *buf, unsigned long len,
int write_object_file_flags(const void *buf, size_t len,
const char *type, struct object_id *oid,
unsigned flags)
{
char hdr[MAX_HEADER_LEN];
int hdrlen = sizeof(hdr);
size_t hdrlen = sizeof(hdr);
/* Normally if we have it in the pack then we do not bother writing
* it out into .git/objects/??/?{38} file.
@@ -2029,7 +2029,8 @@ int hash_object_file_literally(const void *buf, size_t len,
unsigned flags)
{
char *header;
int hdrlen, status = 0;
size_t hdrlen;
int status = 0;
/* type string, SP, %lu of the length plus NUL must fit this */
hdrlen = strlen(type) + MAX_HEADER_LEN;

View File

@@ -246,10 +246,10 @@ static inline void *repo_read_object_file(struct repository *r,
int oid_object_info(struct repository *r, const struct object_id *, unsigned long *);
int hash_object_file(const struct git_hash_algo *algo, const void *buf,
unsigned long len, const char *type,
size_t len, const char *type,
struct object_id *oid);
int write_object_file_flags(const void *buf, unsigned long len,
int write_object_file_flags(const void *buf, size_t len,
const char *type, struct object_id *oid,
unsigned flags);
static inline int write_object_file(const void *buf, unsigned long len,