From cdd4fb15cf06ec1de588bee4576509857d8e2cb4 Mon Sep 17 00:00:00 2001 From: Brian Gernhardt Date: Tue, 9 Jan 2007 00:27:41 -0500 Subject: Auto-quote config values in config.c:store_write_pair() Suggested by Jakub Narebski on the list. When we send a value to store_write_pair(), make sure that the value that gets read out matches the one passed in. This means that for any value that contains leading or trailing whitespace or any comment character (# and ;), we need to surround it in quotes. Signed-off-by: Brian Gernhardt Signed-off-by: Junio C Hamano --- config.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'config.c') diff --git a/config.c b/config.c index 9ded954496..2cd0263e13 100644 --- a/config.c +++ b/config.c @@ -513,11 +513,23 @@ static int store_write_pair(int fd, const char* key, const char* value) { int i; int length = strlen(key+store.baselen+1); + int quote = 0; + + /* Check to see if the value needs to be quoted. */ + if (value[0] == ' ') + quote = 1; + for (i = 0; value[i]; i++) + if (value[i] == ';' || value[i] == '#') + quote = 1; + if (value[i-1] == ' ') + quote = 1; if (write_in_full(fd, "\t", 1) != 1 || write_in_full(fd, key+store.baselen+1, length) != length || write_in_full(fd, " = ", 3) != 3) return 0; + if (quote && write_in_full(fd, "\"", 1) != 1) + return 0; for (i = 0; value[i]; i++) switch (value[i]) { case '\n': @@ -537,6 +549,8 @@ static int store_write_pair(int fd, const char* key, const char* value) return 0; break; } + if (quote && write_in_full(fd, "\"", 1) != 1) + return 0; if (write_in_full(fd, "\n", 1) != 1) return 0; return 1; -- cgit v1.2.3