Code

Disallow empty section and variable names
authorLibor Pechacek <lpechacek@suse.cz>
Tue, 1 Feb 2011 07:13:47 +0000 (08:13 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 Feb 2011 23:19:46 +0000 (15:19 -0800)
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>
config.c
t/t1300-repo-config.sh

index f758734d45af35c87fd1d357a981de50771b074b..d5bb8629a9bbad0c78d51b1466f257ad1c64dbac 100644 (file)
--- a/config.c
+++ b/config.c
@@ -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;
index c3d91d10a03d25b912d56fa578828cb111826617..53fb8228cf18e2b58f3ea63e98a0220fa0fd39f2 100755 (executable)
@@ -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
 '