diff options
author | Matthieu Moy <Matthieu.Moy@imag.fr> | 2012-07-12 14:04:20 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-07-16 09:59:06 -0700 |
commit | e3ebc35b1695e9ac6e9b5978cd4e9ffb7b15f657 (patch) | |
tree | fb1a62844ebae65c826c9017c5dba1f2defcb27d | |
parent | 0e8593dc5b812df00400347e88f5707225fe831e (diff) | |
download | git-e3ebc35b1695e9ac6e9b5978cd4e9ffb7b15f657.tar.gz git-e3ebc35b1695e9ac6e9b5978cd4e9ffb7b15f657.tar.xz |
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>
-rw-r--r-- | builtin/config.c | 16 | ||||
-rw-r--r-- | config.c | 4 |
2 files changed, 14 insertions, 6 deletions
diff --git a/builtin/config.c b/builtin/config.c index e8e1c0a45..8cd08da99 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -387,12 +387,20 @@ int cmd_config(int argc, const char **argv, const char *prefix) home_config_paths(&user_config, &xdg_config, "config"); - if (access(user_config, R_OK) && !access(xdg_config, R_OK)) + if (!user_config) + /* + * It is unknown if HOME/.gitconfig exists, so + * we do not know if we should write to XDG + * location; error out even if XDG_CONFIG_HOME + * is set and points at a sane location. + */ + die("$HOME not set"); + + if (access(user_config, R_OK) && + xdg_config && !access(xdg_config, R_OK)) given_config_file = xdg_config; - else if (user_config) - given_config_file = user_config; else - die("$HOME not set"); + given_config_file = user_config; } else if (use_system_config) given_config_file = git_etc_gitconfig(); @@ -940,12 +940,12 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config) 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); 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); found += 1; } |