Merge branch 'ab/fsck-unexpected-type'
Regression fix. * ab/fsck-unexpected-type: object-file: free(*contents) only in read_loose_object() caller object-file: fix SEGV on free() regression in v2.34.0-rc2maint
commit
2c0fa66bc8
|
@ -605,7 +605,7 @@ static int fsck_loose(const struct object_id *oid, const char *path, void *data)
|
|||
struct object *obj;
|
||||
enum object_type type = OBJ_NONE;
|
||||
unsigned long size;
|
||||
void *contents;
|
||||
void *contents = NULL;
|
||||
int eaten;
|
||||
struct object_info oi = OBJECT_INFO_INIT;
|
||||
struct object_id real_oid = *null_oid();
|
||||
|
@ -630,6 +630,7 @@ static int fsck_loose(const struct object_id *oid, const char *path, void *data)
|
|||
path);
|
||||
if (err < 0) {
|
||||
errors_found |= ERROR_OBJECT;
|
||||
free(contents);
|
||||
return 0; /* keep checking other objects */
|
||||
}
|
||||
|
||||
|
|
|
@ -2557,10 +2557,9 @@ int read_loose_object(const char *path,
|
|||
goto out;
|
||||
}
|
||||
if (check_object_signature(the_repository, expected_oid,
|
||||
*contents, *size, oi->type_name->buf, real_oid)) {
|
||||
free(*contents);
|
||||
*contents, *size,
|
||||
oi->type_name->buf, real_oid))
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
ret = 0; /* everything checks out */
|
||||
|
|
|
@ -17,6 +17,14 @@ test_expect_success setup '
|
|||
export GIT_ALLOC_LIMIT
|
||||
'
|
||||
|
||||
test_expect_success 'enter "large" codepath, with small core.bigFileThreshold' '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
|
||||
git init --bare repo &&
|
||||
echo large | git -C repo hash-object -w --stdin &&
|
||||
git -C repo -c core.bigfilethreshold=4 fsck
|
||||
'
|
||||
|
||||
# add a large file with different settings
|
||||
while read expect config
|
||||
do
|
||||
|
|
Loading…
Reference in New Issue