All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] http: fix charset detection of extract_content_type()
@ 2014-06-17 15:29 Yi, EungJun
  2014-06-17 21:40 ` Jeff King
  0 siblings, 1 reply; 2+ messages in thread
From: Yi, EungJun @ 2014-06-17 15:29 UTC (permalink / raw)
  To: Jeff King; +Cc: git

From: Yi EungJun <eungjun.yi@navercorp.com>

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>
---
 http.c                     | 4 ++--
 t/lib-httpd/error.sh       | 4 ++++
 t/t5550-http-fetch-dumb.sh | 5 +++++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/http.c b/http.c
index 2b4f6a3..3a28b21 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 eafc9d2..a77b8e5 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 01b8aae..ac71418 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
-- 
2.0.0.422.gb6302de

I have squashed Jeff King's patch. How can I credit him in this commit message?

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v3] http: fix charset detection of extract_content_type()
  2014-06-17 15:29 [PATCH v3] http: fix charset detection of extract_content_type() Yi, EungJun
@ 2014-06-17 21:40 ` Jeff King
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff King @ 2014-06-17 21:40 UTC (permalink / raw)
  To: Yi, EungJun; +Cc: git

On Wed, Jun 18, 2014 at 12:29:59AM +0900, Yi, EungJun wrote:

> From: Yi EungJun <eungjun.yi@navercorp.com>
> 
> 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>
> ---

Thanks, the patch content looks good here, but...

> diff --git a/http.c b/http.c
> index 2b4f6a3..3a28b21 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;

It looks like your patch has been whitespace-damaged.

-Peff

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-06-17 21:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-17 15:29 [PATCH v3] http: fix charset detection of extract_content_type() Yi, EungJun
2014-06-17 21:40 ` Jeff King

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.