From: Erik Faye-Lund <kusmabite@gmail.com>
To: git@vger.kernel.org
Cc: jwa@urbancode.com, drew.northup@maine.edu, peff@peff.net
Subject: [PATCH v2 2/2] config: support values longer than 1023 bytes
Date: Sun, 10 Apr 2011 22:54:18 +0200 [thread overview]
Message-ID: <1302468858-7376-2-git-send-email-kusmabite@gmail.com> (raw)
In-Reply-To: <1302468858-7376-1-git-send-email-kusmabite@gmail.com>
parse_value in config.c has a static buffer of 1024 bytes that it
parse the value into. This can sometimes be a problem when a
config file contains very long values.
It's particularly amusing that git-config already is able to write
such files, so it should probably be able to read them as well.
Fix this by using a strbuf instead of a fixed-size buffer.
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
Updated as suggested by Peff.
config.c | 18 ++++++++----------
t/t1303-wacky-config.sh | 2 +-
2 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/config.c b/config.c
index 0abcada..b7fc2c5 100644
--- a/config.c
+++ b/config.c
@@ -133,23 +133,21 @@ static int get_next_char(void)
static char *parse_value(void)
{
- static char value[1024];
- int quote = 0, comment = 0, len = 0, space = 0;
+ static struct strbuf value = STRBUF_INIT;
+ int quote = 0, comment = 0, space = 0;
+ strbuf_reset(&value);
for (;;) {
int c = get_next_char();
- if (len >= sizeof(value) - 1)
- return NULL;
if (c == '\n') {
if (quote)
return NULL;
- value[len] = 0;
- return value;
+ return value.buf;
}
if (comment)
continue;
if (isspace(c) && !quote) {
- if (len)
+ if (value.len)
space++;
continue;
}
@@ -160,7 +158,7 @@ static char *parse_value(void)
}
}
for (; space; space--)
- value[len++] = ' ';
+ strbuf_addch(&value, ' ');
if (c == '\\') {
c = get_next_char();
switch (c) {
@@ -182,14 +180,14 @@ static char *parse_value(void)
default:
return NULL;
}
- value[len++] = c;
+ strbuf_addch(&value, c);
continue;
}
if (c == '"') {
quote = 1-quote;
continue;
}
- value[len++] = c;
+ strbuf_addch(&value, c);
}
}
diff --git a/t/t1303-wacky-config.sh b/t/t1303-wacky-config.sh
index 080117c..46103a1 100755
--- a/t/t1303-wacky-config.sh
+++ b/t/t1303-wacky-config.sh
@@ -44,7 +44,7 @@ LONG_VALUE=$(printf "x%01021dx a" 7)
test_expect_success 'do not crash on special long config line' '
setup &&
git config section.key "$LONG_VALUE" &&
- check section.key "fatal: bad config file line 2 in .git/config"
+ check section.key "$LONG_VALUE"
'
test_done
--
1.7.4.msysgit.0.916.ga2194
next prev parent reply other threads:[~2011-04-10 20:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-10 20:54 [PATCH v2 1/2] strbuf: make sure buffer is zero-terminated Erik Faye-Lund
2011-04-10 20:54 ` Erik Faye-Lund [this message]
2011-04-10 20:58 ` [PATCH v2 2/2] config: support values longer than 1023 bytes Jeff King
2011-04-10 20:57 ` [PATCH v2 1/2] strbuf: make sure buffer is zero-terminated Jeff King
2011-04-10 21:04 ` Erik Faye-Lund
2011-04-10 21:05 ` Jeff King
2011-04-11 21:49 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1302468858-7376-2-git-send-email-kusmabite@gmail.com \
--to=kusmabite@gmail.com \
--cc=drew.northup@maine.edu \
--cc=git@vger.kernel.org \
--cc=jwa@urbancode.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.