aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-04-03 12:29:45 -0700
committerJunio C Hamano <gitster@pobox.com>2011-04-03 12:29:45 -0700
commit625589b5bebb95a13732c15b7c680c8b1540035b (patch)
treee7a5efce2d4e614050f086d461d1923aed5c2838 /builtin
parentebae9ff95de2d0b36b061c7db833df4f7e01a41d (diff)
parent2169ddc056b56deba701cbbba28cdaf2e9821224 (diff)
downloadgit-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.c27
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_) {