aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorMatthieu Moy <Matthieu.Moy@imag.fr>2012-07-12 14:04:20 +0200
committerJunio C Hamano <gitster@pobox.com>2012-07-16 09:59:06 -0700
commite3ebc35b1695e9ac6e9b5978cd4e9ffb7b15f657 (patch)
treefb1a62844ebae65c826c9017c5dba1f2defcb27d /builtin
parent0e8593dc5b812df00400347e88f5707225fe831e (diff)
downloadgit-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>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/config.c16
1 files changed, 12 insertions, 4 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();