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
'