From: Elijah Newren Date: Tue, 25 Nov 2025 06:49:10 GMT Subject: Re: [PATCH] submodule add: sanity check existing .gitmodules Message-ID: In-Reply-To: On Sat, Nov 15, 2025 at 11:03 PM Junio C Hamano wrote: > > "git submodule add" tries to find if a submodule with the same name > already exists at a different path, by looking up an entry in the > .gitmodules file. If the entry in the file is incomplete, e.g., > when the submodule..something variable is defined but there is > no definition of submodule..path variable, it accessing the accessing => tries to access (or accessing => accesses) > missing .path member of the submodule structure and triggers a > segfault. > > A brief audit was done to make sure that the code does not assume > members other than those that are absolutely certain to exist: a > submodule obtained by submodule_from_name() should have .name > member, while a submodule obtained by submodule_from_path() should > also have .path as well as .name member, and we cannot assume > anything else. Luckily, the module_add() codepath was the only > problematic one. It is fairly recent code that comes from 1fa06ced > (submodule: prevent overwriting .gitmodules on path reuse, > 2025-07-24). > > A helper used by update_submodule() seems to assume that its call to > submodule_from_path() always yields a submodule object without a > failure, which seems to rely on the caller's making sure it is the caller's => caller ? > case. Leave an assert() with a NEEDSWORK comment there for future > developers to make sure the assumption actually holds. > > Signed-off-by: Junio C Hamano