diff options
-rw-r--r-- | methods/https.cc | 4 | ||||
-rwxr-xr-x | test/integration/test-ubuntu-bug-1651923-requote-https-uri | 19 |
2 files changed, 23 insertions, 0 deletions
diff --git a/methods/https.cc b/methods/https.cc index b2d05136c..e69323ea6 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -269,6 +269,10 @@ bool HttpsMethod::Fetch(FetchItem *Itm) maybe_add_auth (Uri, _config->FindFile("Dir::Etc::netrc")); + // The "+" is encoded as a workaround for a amazon S3 bug + // see LP bugs #1003633 and #1086997. (taken from http method) + Uri.Path = QuoteString(Uri.Path, "+~ "); + FetchResult Res; CURLUserPointer userp(this, &Res, Itm); // callbacks diff --git a/test/integration/test-ubuntu-bug-1651923-requote-https-uri b/test/integration/test-ubuntu-bug-1651923-requote-https-uri new file mode 100755 index 000000000..bedd972b4 --- /dev/null +++ b/test/integration/test-ubuntu-bug-1651923-requote-https-uri @@ -0,0 +1,19 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" + +setupenvironment +configarchitecture "i386" + +mkdir "aptarchive/target with space" +echo 'alright' > "aptarchive/target with space/working" +changetohttpswebserver +webserverconfig 'aptwebserver::redirect::replace::/targetwithoutspace/' '/target%20with%20space/' +webserverconfig 'aptwebserver::redirect::replace::/targetwithoutspace2/' '/target with space/' + +testsuccess apthelper download-file -o debug::acquire::http=1 "http://localhost:${APTHTTPPORT}/targetwithoutspace/working" httpfile1 +testsuccess apthelper download-file -o debug::acquire::http=1 "http://localhost:${APTHTTPPORT}/targetwithoutspace2/working" httpfile2 +testsuccess apthelper download-file -o debug::acquire::https=1 "https://localhost:${APTHTTPSPORT}/targetwithoutspace/working" httpsfile1 +testsuccess apthelper download-file -o debug::acquire::https=1 "https://localhost:${APTHTTPSPORT}/targetwithoutspace2/working" httpsfile2 |