From: Patrick Steinhardt Date: Mon, 12 Jan 2026 09:21:40 GMT Subject: Re: [PATCH 01/10] environment: move access to core.maxTreeDepth into repo settings Message-ID: In-Reply-To: <20260109213021.2546-2-l.s.r@web.de> On Fri, Jan 09, 2026 at 10:30:12PM +0100, René Scharfe wrote: > diff --git a/git-compat-util.h b/git-compat-util.h > index b0673d1a450..bebcf9f698c 100644 > --- a/git-compat-util.h > +++ b/git-compat-util.h > @@ -578,6 +578,30 @@ static inline bool strip_suffix(const char *str, const char *suffix, > #define DEFAULT_PACKED_GIT_LIMIT \ > ((1024L * 1024L) * (size_t)(sizeof(void*) >= 8 ? (32 * 1024L * 1024L) : 256)) > > +#ifdef _MSC_VER > + /* > + * When traversing into too-deep trees, Visual C-compiled Git seems to > + * run into some internal stack overflow detection in the > + * `RtlpAllocateHeap()` function that is called from within > + * `git_inflate_init()`'s call tree. The following value seems to be > + * low enough to avoid that by letting Git exit with an error before > + * the stack overflow can occur. > + */ > +#define DEFAULT_MAX_ALLOWED_TREE_DEPTH 512 > +#elif defined(GIT_WINDOWS_NATIVE) && defined(__clang__) && defined(__aarch64__) > + /* > + * Similar to Visual C, it seems that on Windows/ARM64 the clang-based > + * builds have a smaller stack space available. When running out of > + * that stack space, a `STATUS_STACK_OVERFLOW` is produced. When the > + * Git command was run from an MSYS2 Bash, this unfortunately results > + * in an exit code 127. Let's prevent that by lowering the maximal > + * tree depth; This value seems to be low enough. > + */ > +#define DEFAULT_MAX_ALLOWED_TREE_DEPTH 1280 > +#else > +#define DEFAULT_MAX_ALLOWED_TREE_DEPTH 2048 > +#endif > + > int git_open_cloexec(const char *name, int flags); > #define git_open(name) git_open_cloexec(name, O_RDONLY) > Why is this new constant defined in "git-compat-util.h"? That feels way too global for my taste for a value that should ultimately only be required by "repo-settings.c". Is there a reason why it's not declared in "repo-settings.h"? I think we could even get away with declaring it in "repo-settings.c". The expectation is that the settings need to be prepared anyway, so we can simply set up the default when parsing the config. Patrick