diff options
author | Martin Ågren <martin.agren@gmail.com> | 2022-07-23 00:22:32 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-07-23 00:51:00 +0300 |
commit | 4447d4129d944eb136fd5c35014cc2b370a2d752 (patch) | |
tree | 69dce76dac38dbd628f1daf395037242c317d145 /read-cache.c | |
parent | e6a653554bb49c26d105f3b478cbdbb1c0648f65 (diff) |
read-cache: make `do_read_index()` always set up `istate->repo`
If there is no index file, e.g., because the repository has just been
created, we return zero early (unless `must_exist` makes us die
instead.)
This early return means we do not set up `istate->repo`. With
`core.untrackedCache=true`, the recent e6a653554b ("untracked-cache:
support '--untracked-files=all' if configured", 2022-03-31) will
eventually pass down `istate->repo` as a null pointer to
`repo_config_get_string()`, causing a segmentation fault.
If we do hit this early return, set up `istate->repo` similar to when we
actually read the index.
Reported-by: Joey Hess <id@joeyh.name>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/read-cache.c b/read-cache.c index 3e0e7d4183..68ed65035b 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2268,8 +2268,11 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) istate->timestamp.nsec = 0; fd = open(path, O_RDONLY); if (fd < 0) { - if (!must_exist && errno == ENOENT) + if (!must_exist && errno == ENOENT) { + if (!istate->repo) + istate->repo = the_repository; return 0; + } die_errno(_("%s: index file open failed"), path); } |