From 67f429e2968d6bfa75106a96000707b090bda974 Mon Sep 17 00:00:00 2001 From: Bryce Kwon Date: Thu, 16 Jul 2026 09:18:14 -1000 Subject: Keep snapshots working under a global git config cgit unsets HOME to isolate git from the calling user, but git still finds the global config through its getpwuid fallback and then dies expanding a `~` in `core.excludesfile`. That die happened after the snapshot headers and the gzip filter were already in place, so the error page was compressed into the archive and every snapshot came out undecompressable. --- source/cgit.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/cgit.c b/source/cgit.c index 156d2a7..909e120 100644 --- a/source/cgit.c +++ b/source/cgit.c @@ -24,8 +24,14 @@ const char *cgit_version = CGIT_VERSION; __attribute__((constructor)) static void constructor_environment() { - /* Do not look in /etc/ for gitconfig and gitattributes. */ + /* + * Isolate git from the calling user's configuration. Ignore the + * system and global config and attributes, so a snapshot cannot be + * broken by something like a core.excludesfile pointing at a "~" path + * that git can no longer expand once HOME is unset below. + */ setenv("GIT_CONFIG_NOSYSTEM", "1", 1); + setenv("GIT_CONFIG_GLOBAL", "/dev/null", 1); setenv("GIT_ATTR_NOSYSTEM", "1", 1); unsetenv("HOME"); unsetenv("XDG_CONFIG_HOME"); -- cgit v2.8.0