From 403364293005ed54ef6230a214acee43e867995d Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 6 Apr 2023 12:11:42 +0200 Subject: [PATCH] content_encoding: only do tranfer-encoding compression if asked to To reduce surprises. Update test 387 and 418 accordingly. Closes #10899 --- lib/content_encoding.c | 9 +++- lib/http.c | 2 +- tests/data/test387 | 22 ++++++--- tests/data/test418 | 107 +++++------------------------------------ 4 files changed, 34 insertions(+), 106 deletions(-) diff --git a/lib/content_encoding.c b/lib/content_encoding.c index f8524837d0..efbe7cb18d 100644 --- a/lib/content_encoding.c +++ b/lib/content_encoding.c @@ -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, diff --git a/lib/http.c b/lib/http.c index cc2f5f0573..cc6dd6c918 100644 --- a/lib/http.c +++ b/lib/http.c @@ -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"); diff --git a/tests/data/test387 b/tests/data/test387 index 644fc7f367..d0e5c95ed4 100644 --- a/tests/data/test387 +++ b/tests/data/test387 @@ -9,10 +9,11 @@ gzip # # Server-side - -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 - + +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- @@ -23,11 +24,14 @@ Transfer-Encoding: gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,g http - + +libz + + Response with overly long compression chain - - -http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS + + +http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS --tr-encoding @@ -39,6 +43,8 @@ GET /%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* +Connection: TE +TE: gzip diff --git a/tests/data/test418 b/tests/data/test418 index 50e974e60a..6031b867b8 100644 --- a/tests/data/test418 +++ b/tests/data/test418 @@ -10,98 +10,8 @@ gzip # Server-side -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 http - + +libz + + Response with multiple Transfer-Encoding headers - - -http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS + + +http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS --tr-encoding @@ -138,6 +51,8 @@ GET /%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* +Connection: TE +TE: gzip