1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-20 06:26:30 +02:00

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-rc2
This commit is contained in:
Junio C Hamano 2021-11-12 15:29:25 -08:00
commit 2c0fa66bc8
3 changed files with 12 additions and 4 deletions

View File

@ -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 */
}

View File

@ -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 */

View File

@ -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