diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-06-03 21:30:35 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-06-03 21:30:35 (GMT) |
commit | 091680472db4ab4604e79259233040a8d5762c06 (patch) | |
tree | 7905dcefc711731411f3d8a31f06bb0de0d6ad21 /pack-bitmap.c | |
parent | d8c8dccbaafd35879493a95840ae52153f1d1136 (diff) | |
parent | 4090511e408a37091e7812bc1828a763a035e0a2 (diff) | |
download | git-091680472db4ab4604e79259233040a8d5762c06.zip git-091680472db4ab4604e79259233040a8d5762c06.tar.gz git-091680472db4ab4604e79259233040a8d5762c06.tar.bz2 |
Merge branch 'tb/midx-race-in-pack-objects'
The multi-pack-index code did not protect the packfile it is going
to depend on from getting removed while in use, which has been
corrected.
* tb/midx-race-in-pack-objects:
builtin/pack-objects.c: ensure pack validity from MIDX bitmap objects
builtin/pack-objects.c: ensure included `--stdin-packs` exist
builtin/pack-objects.c: avoid redundant NULL check
pack-bitmap.c: check preferred pack validity when opening MIDX bitmap
Diffstat (limited to 'pack-bitmap.c')
-rw-r--r-- | pack-bitmap.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/pack-bitmap.c b/pack-bitmap.c index 6a7cdca..3613422 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -315,6 +315,8 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git, struct stat st; char *idx_name = midx_bitmap_filename(midx); int fd = git_open(idx_name); + uint32_t i; + struct packed_git *preferred; free(idx_name); @@ -353,6 +355,20 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git, warning(_("multi-pack bitmap is missing required reverse index")); goto cleanup; } + + for (i = 0; i < bitmap_git->midx->num_packs; i++) { + if (prepare_midx_pack(the_repository, bitmap_git->midx, i)) + die(_("could not open pack %s"), + bitmap_git->midx->pack_names[i]); + } + + preferred = bitmap_git->midx->packs[midx_preferred_pack(bitmap_git)]; + if (!is_pack_valid(preferred)) { + warning(_("preferred pack (%s) is invalid"), + preferred->pack_name); + goto cleanup; + } + return 0; cleanup: @@ -429,8 +445,6 @@ static int load_reverse_index(struct bitmap_index *bitmap_git) * since we will need to make use of them in pack-objects. */ for (i = 0; i < bitmap_git->midx->num_packs; i++) { - if (prepare_midx_pack(the_repository, bitmap_git->midx, i)) - die(_("load_reverse_index: could not open pack")); ret = load_pack_revindex(bitmap_git->midx->packs[i]); if (ret) return ret; |