config: fix several access(NULL) calls
When $HOME is unset, home_config_paths fails and returns NULL pointers for user_config and xdg_config. Valgrind complains with Syscall param access(pathname) points to unaddressable byte(s). Don't call blindly access() on these variables, but test them for NULL-ness before. Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0e8593dc5b
commit
e3ebc35b16
@ -387,12 +387,20 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
home_config_paths(&user_config, &xdg_config, "config");
|
home_config_paths(&user_config, &xdg_config, "config");
|
||||||
|
|
||||||
if (access(user_config, R_OK) && !access(xdg_config, R_OK))
|
if (!user_config)
|
||||||
given_config_file = xdg_config;
|
/*
|
||||||
else if (user_config)
|
* It is unknown if HOME/.gitconfig exists, so
|
||||||
given_config_file = user_config;
|
* we do not know if we should write to XDG
|
||||||
else
|
* location; error out even if XDG_CONFIG_HOME
|
||||||
|
* is set and points at a sane location.
|
||||||
|
*/
|
||||||
die("$HOME not set");
|
die("$HOME not set");
|
||||||
|
|
||||||
|
if (access(user_config, R_OK) &&
|
||||||
|
xdg_config && !access(xdg_config, R_OK))
|
||||||
|
given_config_file = xdg_config;
|
||||||
|
else
|
||||||
|
given_config_file = user_config;
|
||||||
}
|
}
|
||||||
else if (use_system_config)
|
else if (use_system_config)
|
||||||
given_config_file = git_etc_gitconfig();
|
given_config_file = git_etc_gitconfig();
|
||||||
|
4
config.c
4
config.c
@ -940,12 +940,12 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
|
|||||||
found += 1;
|
found += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!access(xdg_config, R_OK)) {
|
if (xdg_config && !access(xdg_config, R_OK)) {
|
||||||
ret += git_config_from_file(fn, xdg_config, data);
|
ret += git_config_from_file(fn, xdg_config, data);
|
||||||
found += 1;
|
found += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!access(user_config, R_OK)) {
|
if (user_config && !access(user_config, R_OK)) {
|
||||||
ret += git_config_from_file(fn, user_config, data);
|
ret += git_config_from_file(fn, user_config, data);
|
||||||
found += 1;
|
found += 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user