All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: "Max Kirillov" <max@max630.net>,
	git@vger.kernel.org, "Jeff King" <peff@peff.net>,
	"Jelmer Vernooij" <jelmer@jelmer.uk>,
	"Florian Manschwetus" <manschwetus@cs-software-gmbh.de>
Subject: Re: [PATCH] http-backend: treat empty CONTENT_LENGTH as zero
Date: Tue, 11 Sep 2018 11:15:13 -0700	[thread overview]
Message-ID: <xmqqk1nrq4su.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <20180911040343.GC20518@aiede.svl.corp.google.com> (Jonathan Nieder's message of "Mon, 10 Sep 2018 21:03:43 -0700")

Jonathan Nieder <jrnieder@gmail.com> writes:

> Kicking off the reviews: ;-)
>
> Jonathan Nieder wrote:
>
>> --- a/http-backend.c
>> +++ b/http-backend.c
>> @@ -350,10 +350,25 @@ static ssize_t read_request_fixed_len(int fd, ssize_t req_len, unsigned char **o
>>  
>>  static ssize_t get_content_length(void)
> [...]
>> +		/*
>> +		 * According to RFC 3875, an empty or missing
>> +		 * CONTENT_LENGTH means "no body", but RFC 3875
>> +		 * precedes HTTP/1.1 and chunked encoding. Apache and
>> +		 * its imitators leave CONTENT_LENGTH unset for
>
> Which imitators?  Maybe this should just say "Apache leaves [...]".

I tend to agree; I do not mind amending the text while queuing.

>> +		 * chunked requests, for which we should use EOF to
>> +		 * detect the end of the request.
>> +		 */
>> +		str = getenv("HTTP_TRANSFER_ENCODING");
>> +		if (str && !strcmp(str, "chunked"))
>
> RFC 2616 says Transfer-Encoding is a list of transfer-codings applied,
> in the order that they were applied, and that "chunked" is always
> applied last.  That means a transfer-encoding like
>
> 	Transfer-Encoding: identity chunked
>
> would be permitted, or e.g.
>
> 	Transfer-Encoding: gzip chunked
>
> Does that means we should be using a check like
>
> 	str && (!strcmp(str, "chunked") || ends_with(str, " chunked"))
>
> ?

Hmph, that's 

	"Transfer-Encoding" ":" 1#transfer-coding

where #rule is

   #rule
      A construct "#" is defined, similar to "*", for defining lists of
      elements. The full form is "<n>#<m>element" indicating at least
      <n> and at most <m> elements, each separated by one or more commas
      (",") and OPTIONAL linear white space (LWS). This makes the usual
      form of lists very easy; a rule such as
         ( *LWS element *( *LWS "," *LWS element ))
      can be shown as
         1#element

So

 - you need to account for comma
 - your LWS may not be a SP

if you want to handle gzipped stream coming in a chunked form, I
think.

Unless I am missing the rule in CGI spec that is used to transform
the value on the Transfer-Encoding header to HTTP_TRANSFER_ENCODING
environment variable, that is.

> That said, a quick search of codesearch.debian.net mostly finds
> examples using straight comparison, so maybe the patch is fine as-is.

I do not think we would mind terribly if we do not support
combinations like gzipped-and-then-chunked from day one.  An in-code
NEEDSWORK comment that refers to the production in RFC 2616 Page 143
may not hurt, though.

Thanks.

  reply	other threads:[~2018-09-11 18:15 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <f12bc1d7-6acb-6ad9-2917-fbb09105f87a@debian.org>
     [not found] ` <20180905202613.GA20473@blodeuwedd>
2018-09-06  6:10   ` CONTENT_LENGTH can no longer be empty Jonathan Nieder
2018-09-06 19:35     ` [PATCH] http-backend: allow empty CONTENT_LENGTH Max Kirillov
2018-09-06 21:54       ` Junio C Hamano
2018-09-07  3:27         ` Max Kirillov
2018-09-07  3:38           ` Jeff King
2018-09-07  4:20             ` Max Kirillov
2018-09-07  4:59             ` Max Kirillov
2018-09-07  9:49               ` Junio C Hamano
2018-09-08  5:41                 ` Max Kirillov
2018-09-09  4:40                 ` Max Kirillov
2018-09-06 22:45       ` Jonathan Nieder
2018-09-07  3:36       ` [PATCH v2] " Max Kirillov
2018-09-08  0:19         ` Jonathan Nieder
2018-09-08  5:35           ` Max Kirillov
2018-09-08  5:42           ` [PATCH v3] " Max Kirillov
2018-09-10  5:17             ` Jonathan Nieder
2018-09-10 20:36               ` Max Kirillov
2018-09-11  4:06                 ` Jonathan Nieder
2018-09-11 20:33                   ` [PATCH v2] http-backend test: make empty CONTENT_LENGTH test more realistic Max Kirillov
2018-09-09  4:10         ` [PATCH v4] http-backend: allow empty CONTENT_LENGTH Max Kirillov
2018-09-10  5:25           ` Jonathan Nieder
2018-09-10 13:17             ` Jeff King
2018-09-10 16:37               ` Junio C Hamano
2018-09-10 18:46                 ` Jeff King
2018-09-10 20:53             ` [PATCH] http-backend: Treat empty CONTENT_LENGTH as zero Max Kirillov
2018-09-10 21:22               ` Jonathan Nieder
2018-09-11  1:55                 ` Jeff King
2018-09-11  2:20                   ` Jonathan Nieder
2018-09-11  2:30                     ` Jeff King
2018-09-11  1:58               ` Jeff King
2018-09-11  3:42               ` [PATCH] http-backend: treat " Jonathan Nieder
2018-09-11  4:03                 ` Jonathan Nieder
2018-09-11 18:15                   ` Junio C Hamano [this message]
2018-09-11 18:27                     ` Junio C Hamano
2018-09-12  5:56                     ` Jeff King
2018-09-12  6:26                       ` Jonathan Nieder
2018-09-12 16:10                       ` Junio C Hamano
2018-09-11  4:18                 ` Junio C Hamano
2018-09-11  4:29                   ` Jonathan Nieder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqk1nrq4su.fsf@gitster-ct.c.googlers.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jelmer@jelmer.uk \
    --cc=jrnieder@gmail.com \
    --cc=manschwetus@cs-software-gmbh.de \
    --cc=max@max630.net \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.