diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-04-03 12:29:45 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-04-03 12:29:45 -0700 |
commit | 625589b5bebb95a13732c15b7c680c8b1540035b (patch) | |
tree | e7a5efce2d4e614050f086d461d1923aed5c2838 /builtin | |
parent | ebae9ff95de2d0b36b061c7db833df4f7e01a41d (diff) | |
parent | 2169ddc056b56deba701cbbba28cdaf2e9821224 (diff) | |
download | git-625589b5bebb95a13732c15b7c680c8b1540035b.tar.gz git-625589b5bebb95a13732c15b7c680c8b1540035b.tar.xz |
Merge branch 'lp/config-vername-check' into maint
* lp/config-vername-check:
Disallow empty section and variable names
Sanity-check config variable names
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/config.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/builtin/config.c b/builtin/config.c index b8b18e3c9..f87443698 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -153,7 +153,6 @@ static int show_config(const char *key_, const char *value_, void *cb) static int get_value(const char *key_, const char *regex_) { int ret = -1; - char *tl; char *global = NULL, *repo_config = NULL; const char *system_wide = NULL, *local; @@ -167,18 +166,32 @@ static int get_value(const char *key_, const char *regex_) system_wide = git_etc_gitconfig(); } - key = xstrdup(key_); - for (tl=key+strlen(key)-1; tl >= key && *tl != '.'; --tl) - *tl = tolower(*tl); - for (tl=key; *tl && *tl != '.'; ++tl) - *tl = tolower(*tl); - if (use_key_regexp) { + char *tl; + + /* + * NEEDSWORK: this naive pattern lowercasing obviously does not + * work for more complex patterns like "^[^.]*Foo.*bar". + * Perhaps we should deprecate this altogether someday. + */ + + key = xstrdup(key_); + for (tl = key + strlen(key) - 1; + tl >= key && *tl != '.'; + tl--) + *tl = tolower(*tl); + for (tl = key; *tl && *tl != '.'; tl++) + *tl = tolower(*tl); + key_regexp = (regex_t*)xmalloc(sizeof(regex_t)); if (regcomp(key_regexp, key, REG_EXTENDED)) { fprintf(stderr, "Invalid key pattern: %s\n", key_); + free(key); goto free_strings; } + } else { + if (git_config_parse_key(key_, &key, NULL)) + goto free_strings; } if (regex_) { |