mirror of
https://github.com/git-for-windows/git.git
synced 2026-06-27 11:47:49 -05:00
refs: protect against chicken-and-egg recursion
In the preceding commits we have fixed recursion when creating the reference backends due to a chicken-and-egg situation with "onbranch" conditions. Unfortunately, this issue has existed for a while, and we didn't really have a good mechanism to detect this recursion. Improve the status quo by detecting the recursion when creating the main reference store. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
988ee98c68
commit
1686d03d4e
7
refs.c
7
refs.c
@@ -2359,15 +2359,22 @@ void ref_store_release(struct ref_store *ref_store)
|
||||
|
||||
struct ref_store *get_main_ref_store(struct repository *r)
|
||||
{
|
||||
static bool initializing;
|
||||
|
||||
if (r->refs_private)
|
||||
return r->refs_private;
|
||||
|
||||
if (!r->gitdir)
|
||||
BUG("attempting to get main_ref_store outside of repository");
|
||||
if (initializing)
|
||||
BUG("initialization of main ref store is recursing");
|
||||
|
||||
initializing = true;
|
||||
r->refs_private = ref_store_init(r, r->ref_storage_format,
|
||||
r->gitdir, REF_STORE_ALL_CAPS);
|
||||
r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
|
||||
initializing = false;
|
||||
|
||||
return r->refs_private;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user