[PATCH] config_set_multivar(): disallow newlines in keys

From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Date: 2007-01-20 12:25:37
This will no longer work:

$ git repo-config 'key.with
newline' some-value

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
	On Fri, 19 Jan 2007, Junio C Hamano wrote:
	
	> I think the current repo-config handles sane cases alright, but
	> it is still fragile in error cases.  For example:
	> 
	> 	$ git repo-config 'foo.bar=bzz
	>           baz.boo' foobar
	> 
	> does not currently barf, but results in a corrupted config file.

	Now it barfs.

 config.c               |    5 +++++
 t/t1300-repo-config.sh |    6 ++++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/config.c b/config.c
index b6082f5..c08c668 100644
--- a/config.c
+++ b/config.c
@@ -661,6 +661,11 @@ int git_config_set_multivar(const char* key, const char* value,
 				goto out_free;
 			}
 			c = tolower(c);
+		} else if (c == '\n') {
+			fprintf(stderr, "invalid key (newline): %s\n", key);
+			free(store.key);
+			ret = 1;
+			goto out_free;
 		}
 		store.key[i] = c;
 	}
diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
index 60acdd3..eb7455b 100755
--- a/t/t1300-repo-config.sh
+++ b/t/t1300-repo-config.sh
@@ -418,5 +418,11 @@ EOF
 
 test_expect_success 'quoting' 'cmp .git/config expect'
 
+test_expect_failure 'key with newline' 'git repo-config key.with\\\
+newline 123'
+
+test_expect_success 'value with newline' 'git repo-config key.sub value.with\\\
+newline'
+
 test_done
 
-- 
1.5.0.rc1.g5a400-dirty

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Sat Jan 20 12:25:46 2007

This archive was generated by hypermail 2.1.8 : 2007-01-20 12:29:39 EST