Skip to content

builtin/index-pack: fix segfaults when running outside of a repo

Patrick Steinhardt requested to merge pks-index-pack-wo-repository into master

It was reported that git-verify-pack(1) has started to crash with Git v2.46.0 when run outside of a repository. This is another fallout from c8aed5e8 (repository: stop setting SHA1 as the default object hash, 2024-05-07), where we have stopped setting the default hash algorithm for the_repository. Consequently, code that relies on the_hash_algo will now crash when it hasn't explicitly been initialized, which may be the case when running outside of a Git repository.

The crash is not in git-verify-pack(1) but instead in git-index-pack(1), which gets called by the former. Ideally, both of these programs should be able to identify the hash algorithm used by the packfile and index without having to rely on external information. But unfortunately, the format for neither of them is completely self-describing, so it is not possible to derive that information. This is a design issue that we should address by introducing a new packfile version that encodes its object hash.

For now though the more important fix is to not make either of these programs crash anymore, which we do by falling back to SHA1 when the object hash is unconfigured. This pessimizes reading packfiles which use a different hash than SHA1, but restores previous behaviour.

Reported-by: Ilya K me@0upti.me Signed-off-by: Patrick Steinhardt ps@pks.im

Closes git-verify-pack(1) and git-index-pack(1) crash ... (#381 - closed).

Edited by Patrick Steinhardt

Merge request reports