My previous statement was not entirely correct as the Content-Length
header is not set for ALL traffic, but just in case Content-Length is
not set already. However, I'd still suggest to move the fix to where
it belongs (in my opinion).


On 2021-05-20 06:43, Matthias Pressfreund wrote:
> Fix works for me, too. Thanks.
> 
> It now sets the "Content-Length: 0" header for ALL traffic that
> is not chunk-encoded. But chunk-encoding may be disabled already
> (e.g. for http/1.0). I'd therefore suggest to move the fix to where
> the handling of zero-length bodies actually takes place.
> 
> 
> --- usr.sbin/httpd/server_fcgi.c      Thu May 20 05:57:23 2021
> +++ usr.sbin/httpd/server_fcgi.c      Thu May 20 06:03:40 2021
> @@ -620,6 +620,12 @@
>           EVBUFFER_LENGTH(clt->clt_srvevb) == 0) {
>               /* Can't chunk encode an empty body. */
>               clt->clt_fcgi.chunked = 0;
> +             key.kv_key = "Content-Length";
> +             if ((kv = kv_find(&resp->http_headers, &key)) == NULL) {
> +                     if (kv_add(&resp->http_headers,
> +                         "Content-Length", "0") == NULL)
> +                             return (-1);
> +             }
>       }
>  
>       /* Set chunked encoding */
> @@ -636,13 +642,6 @@
>               if (kv_add(&resp->http_headers,
>                   "Transfer-Encoding", "chunked") == NULL)
>                       return (-1);
> -     } else {
> -             key.kv_key = "Content-Length";
> -             if ((kv = kv_find(&resp->http_headers, &key)) == NULL) {
> -                     if (kv_add(&resp->http_headers,
> -                         "Content-Length", "0") == NULL)
> -                             return (-1);
> -             }
>       }
>  
>       /* Is it a persistent connection? */
> 
> 

Reply via email to