aboutsummaryrefslogtreecommitdiff
path: root/http.c
diff options
context:
space:
mode:
authorYi EungJun <eungjun.yi@navercorp.com>2014-06-18 07:11:53 +0900
committerJunio C Hamano <gitster@pobox.com>2014-06-17 15:25:00 -0700
commitf34a655d4d1e25f314cd5760e2a39bec28950aa1 (patch)
tree0f60932eb635669b9429eee85479046dcd4a390f /http.c
parentc553fd1c1ef76688b6200e66a825b530b0b02140 (diff)
downloadgit-f34a655d4d1e25f314cd5760e2a39bec28950aa1.tar.gz
git-f34a655d4d1e25f314cd5760e2a39bec28950aa1.tar.xz
http: fix charset detection of extract_content_type()
extract_content_type() could not extract a charset parameter if the parameter is not the first one and there is a whitespace and a following semicolon just before the parameter. For example: text/plain; format=fixed ;charset=utf-8 And it also could not handle correctly some other cases, such as: text/plain; charset=utf-8; format=fixed text/plain; some-param="a long value with ;semicolons;"; charset=utf-8 Thanks-to: Jeff King <peff@peff.net> Signed-off-by: Yi EungJun <eungjun.yi@navercorp.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'http.c')
-rw-r--r--http.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/http.c b/http.c
index 2b4f6a357..3a28b219b 100644
--- a/http.c
+++ b/http.c
@@ -927,7 +927,7 @@ static int extract_param(const char *raw, const char *name,
return -1;
raw++;
- while (*raw && !isspace(*raw))
+ while (*raw && !isspace(*raw) && *raw != ';')
strbuf_addch(out, *raw++);
return 0;
}
@@ -971,7 +971,7 @@ static void extract_content_type(struct strbuf *raw, struct strbuf *type,
strbuf_reset(charset);
while (*p) {
- while (isspace(*p))
+ while (isspace(*p) || *p == ';')
p++;
if (!extract_param(p, "charset", charset))
return;