summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-12-09 08:56:44 (GMT)
committerJunio C Hamano <gitster@pobox.com>2007-12-09 08:56:44 (GMT)
commit9b433e44964202befd175f1f28687067b8bd058f (patch)
tree07ae65c46c2a8fe8b3e83b5a4134fa5ca1d19f18 /config.c
parent774751a8bc594a5b56039bbdc43c45e3882dd804 (diff)
parent6281f394674bf2db861967da6c2215cfc3fc78af (diff)
downloadgit-9b433e44964202befd175f1f28687067b8bd058f.zip
git-9b433e44964202befd175f1f28687067b8bd058f.tar.gz
git-9b433e44964202befd175f1f28687067b8bd058f.tar.bz2
Merge branch 'maint'
* maint: config.c:store_write_pair(): don't read the byte before a malloc'd buffer.
Diffstat (limited to 'config.c')
-rw-r--r--config.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/config.c b/config.c
index ed96213..15b3d07 100644
--- a/config.c
+++ b/config.c
@@ -646,13 +646,19 @@ static int store_write_pair(int fd, const char* key, const char* value)
int length = strlen(key+store.baselen+1);
int quote = 0;
- /* Check to see if the value needs to be quoted. */
+ /*
+ * Check to see if the value needs to be surrounded with a dq pair.
+ * Note that problematic characters are always backslash-quoted; this
+ * check is about not losing leading or trailing SP and strings that
+ * follow beginning-of-comment characters (i.e. ';' and '#') by the
+ * configuration parser.
+ */
if (value[0] == ' ')
quote = 1;
for (i = 0; value[i]; i++)
if (value[i] == ';' || value[i] == '#')
quote = 1;
- if (value[i-1] == ' ')
+ if (i && value[i-1] == ' ')
quote = 1;
if (write_in_full(fd, "\t", 1) != 1 ||