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