aboutsummaryrefslogtreecommitdiffstats
path: root/refs.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-05-15 08:51:10 +0200
committerJunio C Hamano <gitster@pobox.com>2024-05-15 07:30:52 -0700
commit8e4f5c2dc26e8e88c8c4784f133d2b35a771d2ac (patch)
treec17cf925061fe0ad3e5b9280c6f6e450a978abbb /refs.c
parentref-filter: properly distinuish pseudo and root refs (diff)
downloadgit-8e4f5c2dc26e8e88c8c4784f133d2b35a771d2ac.tar.gz
git-8e4f5c2dc26e8e88c8c4784f133d2b35a771d2ac.zip
refs: refuse to write pseudorefs
Pseudorefs are not stored in the ref database as by definition, they carry additional metadata that essentially makes them not a ref. As such, writing pseudorefs via the ref backend does not make any sense whatsoever as the ref backend wouldn't know how exactly to store the data. Restrict writing pseudorefs via the ref backend. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/refs.c b/refs.c
index c13b8ff6d8..9abd9e5b86 100644
--- a/refs.c
+++ b/refs.c
@@ -1263,6 +1263,13 @@ int ref_transaction_update(struct ref_transaction *transaction,
return -1;
}
+ if (!(flags & REF_SKIP_REFNAME_VERIFICATION) &&
+ is_pseudo_ref(refname)) {
+ strbuf_addf(err, _("refusing to update pseudoref '%s'"),
+ refname);
+ return -1;
+ }
+
if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS)
BUG("illegal flags 0x%x passed to ref_transaction_update()", flags);