diff options
author | Yi EungJun <eungjun.yi@navercorp.com> | 2014-06-18 07:11:53 +0900 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-06-17 15:25:00 -0700 |
commit | f34a655d4d1e25f314cd5760e2a39bec28950aa1 (patch) | |
tree | 0f60932eb635669b9429eee85479046dcd4a390f | |
parent | c553fd1c1ef76688b6200e66a825b530b0b02140 (diff) | |
download | git-f34a655d4d1e25f314cd5760e2a39bec28950aa1.tar.gz |
http: fix charset detection of extract_content_type()ye/http-extract-charset
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>
-rw-r--r-- | http.c | 4 | ||||
-rwxr-xr-x | t/lib-httpd/error.sh | 4 | ||||
-rwxr-xr-x | t/t5550-http-fetch-dumb.sh | 5 |
3 files changed, 11 insertions, 2 deletions
@@ -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; diff --git a/t/lib-httpd/error.sh b/t/lib-httpd/error.sh index eafc9d2d90..a77b8e5469 100755 --- a/t/lib-httpd/error.sh +++ b/t/lib-httpd/error.sh @@ -19,6 +19,10 @@ case "$PATH_INFO" in printf "text/plain; charset=utf-16" charset=utf-16 ;; +*odd-spacing*) + printf "text/plain; foo=bar ;charset=utf-16; other=nonsense" + charset=utf-16 + ;; esac printf "\n" diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh index 01b8aae2ed..ac71418a1b 100755 --- a/t/t5550-http-fetch-dumb.sh +++ b/t/t5550-http-fetch-dumb.sh @@ -191,5 +191,10 @@ test_expect_success 'http error messages are reencoded' ' grep "this is the error message" stderr ' +test_expect_success 'reencoding is robust to whitespace oddities' ' + test_must_fail git clone "$HTTPD_URL/error/odd-spacing" 2>stderr && + grep "this is the error message" stderr +' + stop_httpd test_done |