From aca4f7dff0ee615164668e923deaf5cc96ab1c8a Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 18 Sep 2017 11:07:28 +0200 Subject: [PATCH] Don't remove Content-Encoding in fetchurl / nix-prefetch-url Fixes #1568. --- src/libstore/builtins.cc | 1 + src/libstore/download.cc | 3 ++- src/libstore/download.hh | 1 + src/nix-prefetch-url/nix-prefetch-url.cc | 4 +++- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libstore/builtins.cc b/src/libstore/builtins.cc index 1075b45c0..4ca4a838e 100644 --- a/src/libstore/builtins.cc +++ b/src/libstore/builtins.cc @@ -27,6 +27,7 @@ void builtinFetchurl(const BasicDerivation & drv, const std::string & netrcData) the result anyway. */ DownloadRequest request(url); request.verifyTLS = false; + request.decompress = false; /* Note: have to use a fresh downloader here because we're in a forked process. */ diff --git a/src/libstore/download.cc b/src/libstore/download.cc index f5304daee..3f5e744dd 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -269,7 +269,8 @@ struct CurlDownloader : public Downloader done = true; try { - result.data = decodeContent(encoding, ref(result.data)); + if (request.decompress) + result.data = decodeContent(encoding, ref(result.data)); callSuccess(success, failure, const_cast(result)); act.progress(result.data->size(), result.data->size()); } catch (...) { diff --git a/src/libstore/download.hh b/src/libstore/download.hh index 752bf3723..f2d65ad8d 100644 --- a/src/libstore/download.hh +++ b/src/libstore/download.hh @@ -17,6 +17,7 @@ struct DownloadRequest size_t tries = 5; unsigned int baseRetryTimeMs = 250; ActivityId parentAct; + bool decompress = true; DownloadRequest(const std::string & uri) : uri(uri), parentAct(curActivity) { } diff --git a/src/nix-prefetch-url/nix-prefetch-url.cc b/src/nix-prefetch-url/nix-prefetch-url.cc index 791a1eeb5..7e62a033b 100644 --- a/src/nix-prefetch-url/nix-prefetch-url.cc +++ b/src/nix-prefetch-url/nix-prefetch-url.cc @@ -158,7 +158,9 @@ int main(int argc, char * * argv) auto actualUri = resolveMirrorUri(state, uri); /* Download the file. */ - auto result = getDownloader()->download(DownloadRequest(actualUri)); + DownloadRequest req(actualUri); + req.decompress = false; + auto result = getDownloader()->download(req); AutoDelete tmpDir(createTempDir(), true); Path tmpFile = (Path) tmpDir + "/tmp";