Browse Source

Disallow empty section and variable names

It is possible to break your repository config by creating an invalid key.  The
config parser in turn chokes on it:

  $ git init
  Initialized empty Git repository in /tmp/gittest/.git/
  $ git config .foo false
  $ git config core.bare
  fatal: bad config file line 6 in .git/config

This patch makes git-config reject keys which start or end with a dot and adds
tests for these cases.

Signed-off-by: Libor Pechacek <lpechacek@suse.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Libor Pechacek 14 years ago committed by Junio C Hamano
parent
commit
2169ddc056
  1. 7
      config.c
  2. 4
      t/t1300-repo-config.sh

7
config.c

@ -1120,11 +1120,16 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_) @@ -1120,11 +1120,16 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_)
* key name separated by a dot, we have to know where the dot is.
*/

if (last_dot == NULL) {
if (last_dot == NULL || last_dot == key) {
error("key does not contain a section: %s", key);
return -2;
}

if (!last_dot[1]) {
error("key does not contain variable name: %s", key);
return -2;
}

baselen = last_dot - key;
if (baselen_)
*baselen_ = baselen;

4
t/t1300-repo-config.sh

@ -889,6 +889,10 @@ test_expect_success 'key sanity-checking' ' @@ -889,6 +889,10 @@ test_expect_success 'key sanity-checking' '
test_must_fail git config foo.1bar &&
test_must_fail git config foo."ba
z".bar &&
test_must_fail git config . false &&
test_must_fail git config .foo false &&
test_must_fail git config foo. false &&
test_must_fail git config .foo. false &&
git config foo.bar true &&
git config foo."ba =z".bar false
'

Loading…
Cancel
Save