@matheusbsbs / matheus-bagliano / commits / 2169ddc056
Fork 0

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>

Libor Pechacek committed Feb 1, 2011 at 08:13 UTC 2169ddc056b56deba701cbbba28cdaf2e9821224
2 files changed +10 -1
config.c
+6 -1
@@ -1120,11 +1120,16 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_)
1120 * key name separated by a dot, we have to know where the dot is.
1121 */
1122
1123 - if (last_dot == NULL) {
1123 + if (last_dot == NULL || last_dot == key) {
1124 error("key does not contain a section: %s", key);
1125 return -2;
1126 }
1127
1128 + if (!last_dot[1]) {
1129 + error("key does not contain variable name: %s", key);
1130 + return -2;
1131 + }
1132 +
1133 baselen = last_dot - key;
1134 if (baselen_)
1135 *baselen_ = baselen;
t/t1300-repo-config.sh
+4
@@ -889,6 +889,10 @@ test_expect_success 'key sanity-checking' '
889 test_must_fail git config foo.1bar &&
890 test_must_fail git config foo."ba
891 z".bar &&
892 + test_must_fail git config . false &&
893 + test_must_fail git config .foo false &&
894 + test_must_fail git config foo. false &&
895 + test_must_fail git config .foo. false &&
896 git config foo.bar true &&
897 git config foo."ba =z".bar false
898 '