Git fork

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>

authored by

Yi EungJun and committed by
Junio C Hamano
f34a655d c553fd1c

+11 -2
+2 -2
http.c
··· 927 927 return -1; 928 928 raw++; 929 929 930 - while (*raw && !isspace(*raw)) 930 + while (*raw && !isspace(*raw) && *raw != ';') 931 931 strbuf_addch(out, *raw++); 932 932 return 0; 933 933 } ··· 971 971 972 972 strbuf_reset(charset); 973 973 while (*p) { 974 - while (isspace(*p)) 974 + while (isspace(*p) || *p == ';') 975 975 p++; 976 976 if (!extract_param(p, "charset", charset)) 977 977 return;
+4
t/lib-httpd/error.sh
··· 19 19 printf "text/plain; charset=utf-16" 20 20 charset=utf-16 21 21 ;; 22 + *odd-spacing*) 23 + printf "text/plain; foo=bar ;charset=utf-16; other=nonsense" 24 + charset=utf-16 25 + ;; 22 26 esac 23 27 printf "\n" 24 28
+5
t/t5550-http-fetch-dumb.sh
··· 191 191 grep "this is the error message" stderr 192 192 ' 193 193 194 + test_expect_success 'reencoding is robust to whitespace oddities' ' 195 + test_must_fail git clone "$HTTPD_URL/error/odd-spacing" 2>stderr && 196 + grep "this is the error message" stderr 197 + ' 198 + 194 199 stop_httpd 195 200 test_done