git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] Disallow empty section and variable names

From
LPLibor Pechacek <lpechacek@suse.cz>
Date
Jan 30, 2011, 20:34 UTC
Message-ID
<20110130203445.GA9689@fm.suse.cz>
In-Reply-To
<20110127145253.GD6312@fm.suse.cz>

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 .foo fatal: bad config file line 6 in .git/config

This patch makes git-config reject keys which start or end with a dot, adds tests for these cases and also fixes a typo in t5526-fetch-submodules, which was exposed by the new check.

Signed-off-by: Libor Pechacek <lpechacek@suse.cz>
---

Added tests for the cases checked, made git_config_parse_key consistently return -2 when the key is invalid. Applies on top "Sanity-check config variable names".

 config.c                    |    8 +++++++-
 t/t1300-repo-config.sh      |    4 ++++
 t/t5526-fetch-submodules.sh |    2 +-
 3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/config.c b/config.c
index fde91f5..e27a39f 100644
--- a/config.c
+++ b/config.c
@@ -1120,11 +1120,17 @@ 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 || *key == '.') {
 		error("key does not contain a section: %s", key);
 		return -2;
 	}
 
+	i = strlen(key);
+	if (i && key[i-1] == '.') {
+		error("key does not contain variable name: %s", key);
+		return -2;
+	}
+
 	baselen = last_dot - key;
 	if (baselen_)
 		*baselen_ = baselen;
diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
index c3d91d1..568d51d 100755
--- a/t/t1300-repo-config.sh
+++ b/t/t1300-repo-config.sh
@@ -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 . &&
+	test_must_fail git config .foo &&
+	test_must_fail git config foo. &&
+	test_must_fail git config .foo. &&
 	git config foo.bar true &&
 	git config foo."ba =z".bar false
 '
diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
index 884a5e5..7106c6c 100755
--- a/t/t5526-fetch-submodules.sh
+++ b/t/t5526-fetch-submodules.sh
@@ -124,7 +124,7 @@ test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setti
 	(
 		cd downstream &&
 		git fetch --recurse-submodules >../actual.out 2>../actual.err &&
-		git config -f --unset .gitmodules submodule.submodule.fetchRecurseSubmodules true &&
+		git config -f .gitmodules --unset submodule.submodule.fetchRecurseSubmodules true &&
 		git config --unset submodule.submodule.fetchRecurseSubmodules
 	) &&
 	test_cmp expect.out actual.out &&
-- 
1.7.4.rc3.11.g54760
Previous: Libor PechacekNext: Johannes Sixt
Message 2 of 9 in “Disallow empty section and variable names”
  1. Disallow empty section and variable namesLibor Pechacek, Jan 27, 2011
  2. Disallow empty section and variable namesLibor Pechacek, Jan 30, 2011
  3. Johannes SixtJan 31, 2011
  4. Libor PechacekJan 31, 2011
  5. Johannes SixtJan 31, 2011
  6. Disallow empty section and variable namesLibor Pechacek, Jan 31, 2011
  7. Jens LehmannJan 31, 2011
  8. Disallow empty section and variable namesLibor Pechacek, Feb 1, 2011
  9. Junio C HamanoFeb 10, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.