Merge branch 'ye/http-extract-charset'
authorJunio C Hamano <gitster@pobox.com>
Wed, 2 Jul 2014 19:53:05 +0000 (12:53 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Jul 2014 19:53:05 +0000 (12:53 -0700)
* ye/http-extract-charset:
http: fix charset detection of extract_content_type()

http.c
t/lib-httpd/error.sh
t/t5550-http-fetch-dumb.sh
diff --git a/http.c b/http.c
index 2b4f6a357c39f3685107da3cf63a9891470a6de9..3a28b219be5ecb270a6ff0422c7a4a5cdda023f0 100644 (file)
--- 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;
index eafc9d2d90ff7646062edd9a376839e469334760..a77b8e546926308fbe348bf01d625bad4996a095 100755 (executable)
@@ -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"
 
index 01b8aae2ed12eab92ecbfb562cb616e0cfc47202..ac71418a1b26bc17a1252d6831869b96a8d8c176 100755 (executable)
@@ -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