Skip to content

Commit

Permalink
Disallow empty section and variable names
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Libor Pechacek authored and Junio C Hamano committed Feb 22, 2011
1 parent b09c53a commit 2169ddc
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
7 changes: 6 additions & 1 deletion config.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions t/t1300-repo-config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
'
Expand Down

0 comments on commit 2169ddc

Please sign in to comment.