git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] remote-curl: accept all encoding supported by curl

From
BWBrandon Williams <bmwill@google.com>
Date
May 21, 2018, 23:40 UTC
Message-ID
<20180521234004.142548-1-bmwill@google.com>

Configure curl to accept all encoding which curl supports instead of only accepting gzip responses.

This is necessary to fix a bug when using an installation of curl which doesn't support gzip. Since curl doesn't do any checking to verify that it supports the encoding set when calling 'curl_easy_setopt()', curl can end up sending an "Accept-Encoding" header indicating that it supports a particular encoding when in fact it doesn't. Instead when the empty string "" is used when setting `CURLOPT_ENCODING`, curl will send an "Accept-Encoding" header containing only the encoding methods curl supports.

Signed-off-by: Brandon Williams <bmwill@google.com>
---
 http.c                      | 2 +-
 remote-curl.c               | 2 +-
 t/t5551-http-fetch-smart.sh | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/http.c b/http.c
index fed13b216..709150fc7 100644
--- a/http.c
+++ b/http.c
@@ -1788,7 +1788,7 @@ static int http_request(const char *url,
 
 	curl_easy_setopt(slot->curl, CURLOPT_URL, url);
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, headers);
-	curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "gzip");
+	curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
 
 	ret = run_one_slot(slot, &results);
 
diff --git a/remote-curl.c b/remote-curl.c
index ceb05347b..565bba104 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -684,7 +684,7 @@ static int post_rpc(struct rpc_state *rpc)
 	curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
 	curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
 	curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
-	curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "gzip");
+	curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
 
 	if (large_request) {
 		/* The request body is large and the size cannot be predicted.
diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh
index f5721b4a5..39c65482c 100755
--- a/t/t5551-http-fetch-smart.sh
+++ b/t/t5551-http-fetch-smart.sh
@@ -26,14 +26,14 @@ setup_askpass_helper
 cat >exp <<EOF
 > GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1
 > Accept: */*
-> Accept-Encoding: gzip
+> Accept-Encoding: deflate, gzip
 > Pragma: no-cache
 < HTTP/1.1 200 OK
 < Pragma: no-cache
 < Cache-Control: no-cache, max-age=0, must-revalidate
 < Content-Type: application/x-git-upload-pack-advertisement
 > POST /smart/repo.git/git-upload-pack HTTP/1.1
-> Accept-Encoding: gzip
+> Accept-Encoding: deflate, gzip
 > Content-Type: application/x-git-upload-pack-request
 > Accept: application/x-git-upload-pack-result
 > Content-Length: xxx
-- 
2.17.0.441.gb46fe60e1d-goog
Next: Brandon Williams
Message 1 of 15 in “remote-curl: accept all encoding supported by curl”
  1. 1/2 remote-curl: accept all encoding supported by curlBrandon Williams, May 21, 2018
  2. 2/2 remote-curl: accept compressed responses with protocol v2Brandon Williams, May 21, 2018
  3. Jonathan NiederMay 22, 2018
  4. anton.golubev@gmail.comMay 26, 2018
  5. Stefan BellerMay 22, 2018
  6. Jonathan NiederMay 22, 2018
  7. Daniel StenbergMay 22, 2018
  8. Brandon WilliamsMay 22, 2018
  9. 1/2 remote-curl: accept all encodings supported by curlBrandon Williams, May 22, 2018
  10. 2/2 remote-curl: accept compressed responses with protocol v2Brandon Williams, May 22, 2018
  11. Jonathan NiederMay 22, 2018
  12. Jonathan NiederMay 22, 2018
  13. Junio C HamanoMay 23, 2018
  14. brian m. carlsonMay 23, 2018
  15. Daniel StenbergMay 23, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.