summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-07-02 12:53:05 -0700
committerJunio C Hamano <gitster@pobox.com>2014-07-02 12:53:05 -0700
commita02ad882a17b9d45f63ea448391ac5e9f7948222 (patch)
tree4c48e769c8f8556a24f10db4a892889d154623b0
parent6293aea559b6c8f224f748e5a2a641ddb6cca55a (diff)
parentf34a655d4d1e25f314cd5760e2a39bec28950aa1 (diff)
downloadgit-a02ad882a17b9d45f63ea448391ac5e9f7948222.tar.gz
Merge branch 'ye/http-extract-charset'
* ye/http-extract-charset: http: fix charset detection of extract_content_type()
-rw-r--r--http.c4
-rwxr-xr-xt/lib-httpd/error.sh4
-rwxr-xr-xt/t5550-http-fetch-dumb.sh5
3 files changed, 11 insertions, 2 deletions
diff --git a/http.c b/http.c
index 2b4f6a357c..3a28b219be 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;
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