]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
content_encoding: only do tranfer-encoding compression if asked to
authorDaniel Stenberg <daniel@haxx.se>
Thu, 6 Apr 2023 10:11:42 +0000 (12:11 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 7 Apr 2023 11:39:20 +0000 (13:39 +0200)
To reduce surprises. Update test 387 and 418 accordingly.

Closes #10899

lib/content_encoding.c
lib/http.c
tests/data/test387
tests/data/test418

index f8524837d04915add84b3aca2a85731eb04281a1..efbe7cb18d1e671ada16e496b6dceb9e1cda1138 100644 (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,
index cc2f5f057339fb19c5919878b72587f1ea727bf6..cc6dd6c918a7316d4b68fa330a5edf9e20a5c80c 100644 (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");
index 644fc7f367db5465c4d62f2fa9d01d57e2300224..d0e5c95ed4b0c3e950a18e22d1cfd9de0459be7b 100644 (file)
@@ -9,10 +9,11 @@ gzip
 #
 # Server-side
 <reply>
-<data nocheck="yes">
-HTTP/1.1 200 OK\r
-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\r
-\r
+<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\r
 User-Agent: curl/%VERSION\r
 Accept: */*\r
+Connection: TE\r
+TE: gzip\r
 \r
 </protocol>
 
index 50e974e60aa9ff5afdfbf0d35f7ac45f9858965d..6031b867b889895300813792c415cbd8214a3c27 100644 (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>