content_encoding: only do tranfer-encoding compression if asked to

To reduce surprises. Update test 387 and 418 accordingly.

Closes #10899
This commit is contained in:
Daniel Stenberg 2023-04-06 12:11:42 +02:00
parent 3de6b6cfe5
commit 4033642930
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
4 changed files with 34 additions and 106 deletions

View File

@ -53,6 +53,9 @@
#include "content_encoding.h"
#include "strdup.h"
#include "strcase.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
@ -1077,8 +1080,12 @@ CURLcode Curl_build_unencoding_stack(struct Curl_easy *data,
Curl_httpchunk_init(data); /* init our chunky engine. */
}
else if(namelen) {
const struct content_encoding *encoding = find_encoding(name, namelen);
const struct content_encoding *encoding;
struct contenc_writer *writer;
if(is_transfer && !data->set.http_transfer_encoding)
/* not requested, ignore */
return CURLE_OK;
encoding = find_encoding(name, namelen);
if(!k->writer_stack) {
k->writer_stack = new_unencoding_writer(data, &client_encoding,

View File

@ -3572,7 +3572,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
TRUE);
if(result)
return result;
if(!k->chunk) {
if(!k->chunk && data->set.http_transfer_encoding) {
/* if this isn't chunked, only close can signal the end of this transfer
as Content-Length is said not to be trusted for transfer-encoding! */
connclose(conn, "HTTP/1.1 transfer-encoding without chunks");

View File

@ -9,10 +9,11 @@ gzip
#
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Transfer-Encoding: gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip
<data nocheck="yes" crlf="yes">
HTTP/1.1 200 OK
Content-Length: 6
Transfer-Encoding: gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip
-foo-
</data>
</reply>
@ -23,11 +24,14 @@ Transfer-Encoding: gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,g
<server>
http
</server>
<name>
<features>
libz
</features>
<name>
Response with overly long compression chain
</name>
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS
</name>
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS --tr-encoding
</command>
</client>
@ -39,6 +43,8 @@ GET /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Connection: TE
TE: gzip
</protocol>

View File

@ -10,98 +10,8 @@ gzip
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
HTTP/1.1 200 swsclose OK
Content-Length: 6
Transfer-Encoding: gzip
Transfer-Encoding: gzip
Transfer-Encoding: gzip
@ -122,11 +32,14 @@ Transfer-Encoding: gzip
<server>
http
</server>
<name>
<features>
libz
</features>
<name>
Response with multiple Transfer-Encoding headers
</name>
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS
</name>
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS --tr-encoding
</command>
</client>
@ -138,6 +51,8 @@ GET /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Connection: TE
TE: gzip
</protocol>