On Tue, Aug 25, 2020 at 12:18:42PM -0400, Derrick Stolee wrote: > The best I can see is that prepare_midx_pack() will return 1 if the > pack no longer exists, and this would cause a die("error preparing > packfile from multi-pack-index") in nth_midxed_pack_entry(), killing > the following stack trace: > > + find_pack_entry():packfile.c > + fill_midx_entry():midx.c > + nth_midxed_pack_entry():midx.c > > Perhaps that die() is a bit over-zealous since we could return 1 > through this stack and find_pack_entry() could continue searching > for the object in the packed_git list. However, it could start > returning false _negatives_ if there were duplicates of the object > in the multi-pack-index but only the latest copy was deleted (and > the object does not appear in a pack-file outside of the multi- > pack-index). Hmm, yeah. I thought this code is already doing the right thing, because I'd expect the is_pack_valid() call later in nth_midxed_pack_entry() to be where we notice the problem. But add_packed_git() does stat the packfile and return an error. So that die() really ought to be just "return 0". The caller already has to (and does) handle similar errors (including that the pack went away after we added it to the packed_git list, or that it exists but has bogus data, etc). -Peff