From: Junio C Hamano Date: Sun, 9 Dec 2007 08:56:44 +0000 (-0800) Subject: Merge branch 'maint' X-Git-Tag: v1.5.4-rc0~37 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/9b433e44964202befd175f1f28687067b8bd058f?hp=-c Merge branch 'maint' * maint: config.c:store_write_pair(): don't read the byte before a malloc'd buffer. --- 9b433e44964202befd175f1f28687067b8bd058f diff --combined config.c index ed96213c44,914cfce855..15b3d07349 --- a/config.c +++ b/config.c @@@ -6,7 -6,6 +6,7 @@@ * */ #include "cache.h" +#include "exec_cmd.h" #define MAXNAME (256) @@@ -460,21 -459,6 +460,21 @@@ int git_config_from_file(config_fn_t fn return ret; } +const char *git_etc_gitconfig(void) +{ + static const char *system_wide; + if (!system_wide) { + system_wide = ETC_GITCONFIG; + if (!is_absolute_path(system_wide)) { + /* interpret path relative to exec-dir */ + const char *exec_path = git_exec_path(); + system_wide = prefix_path(exec_path, strlen(exec_path), + system_wide); + } + } + return system_wide; +} + int git_config(config_fn_t fn) { int ret = 0; @@@ -487,8 -471,8 +487,8 @@@ * config file otherwise. */ filename = getenv(CONFIG_ENVIRONMENT); if (!filename) { - if (!access(ETC_GITCONFIG, R_OK)) - ret += git_config_from_file(fn, ETC_GITCONFIG); + if (!access(git_etc_gitconfig(), R_OK)) + ret += git_config_from_file(fn, git_etc_gitconfig()); home = getenv("HOME"); filename = getenv(CONFIG_LOCAL_ENVIRONMENT); if (!filename) @@@ -646,13 -630,19 +646,19 @@@ static int store_write_pair(int fd, con int length = strlen(key+store.baselen+1); int quote = 0; - /* Check to see if the value needs to be quoted. */ + /* + * Check to see if the value needs to be surrounded with a dq pair. + * Note that problematic characters are always backslash-quoted; this + * check is about not losing leading or trailing SP and strings that + * follow beginning-of-comment characters (i.e. ';' and '#') by the + * configuration parser. + */ if (value[0] == ' ') quote = 1; for (i = 0; value[i]; i++) if (value[i] == ';' || value[i] == '#') quote = 1; - if (value[i-1] == ' ') + if (i && value[i-1] == ' ') quote = 1; if (write_in_full(fd, "\t", 1) != 1 ||