mirror of
https://github.com/git/git.git
synced 2024-11-27 12:03:55 +08:00
midx-write: fix leaking hashfile on error cases
When writing the MIDX file we first create the `struct hashfile` used to write the trailer hash, and then afterwards we verify whether we can actually write the MIDX in the first place. When we decide that we can't, this leads to a memory leak because we never free the hash file contents. We could fix this by freeing the hashfile on the exit path. There is a better option though: we can simply move the checks for the error condition earlier. As there is no early exit between creating the hashfile and finalizing it anymore this is sufficient to fix the memory leak. While at it, also move around the block checking for `ctx.entries_nr`. This change is not required to fix the memory leak, but it feels natural to move together all massaging of parameters before we go with them and execute the actual logic. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
479601e9f4
commit
8a7846383e
24
midx-write.c
24
midx-write.c
@ -1308,6 +1308,18 @@ static int write_midx_internal(const char *object_dir,
|
||||
pack_name_concat_len += MIDX_CHUNK_ALIGNMENT -
|
||||
(pack_name_concat_len % MIDX_CHUNK_ALIGNMENT);
|
||||
|
||||
if (ctx.nr - dropped_packs == 0) {
|
||||
error(_("no pack files to index."));
|
||||
result = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!ctx.entries_nr) {
|
||||
if (flags & MIDX_WRITE_BITMAP)
|
||||
warning(_("refusing to write multi-pack .bitmap without any objects"));
|
||||
flags &= ~(MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP);
|
||||
}
|
||||
|
||||
if (ctx.incremental) {
|
||||
struct strbuf lock_name = STRBUF_INIT;
|
||||
|
||||
@ -1333,18 +1345,6 @@ static int write_midx_internal(const char *object_dir,
|
||||
f = hashfd(get_lock_file_fd(&lk), get_lock_file_path(&lk));
|
||||
}
|
||||
|
||||
if (ctx.nr - dropped_packs == 0) {
|
||||
error(_("no pack files to index."));
|
||||
result = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!ctx.entries_nr) {
|
||||
if (flags & MIDX_WRITE_BITMAP)
|
||||
warning(_("refusing to write multi-pack .bitmap without any objects"));
|
||||
flags &= ~(MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP);
|
||||
}
|
||||
|
||||
cf = init_chunkfile(f);
|
||||
|
||||
add_chunk(cf, MIDX_CHUNKID_PACKNAMES, pack_name_concat_len,
|
||||
|
Loading…
Reference in New Issue
Block a user