summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2013-01-24 18:52:25 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2013-01-24 18:52:25 +0100
commit1d12857c083b436fb88710cd8e87267ece7af8a9 (patch)
treed0c5aa559e4128d5a347b3f3f49d466c789d84cc
parent72663b44179f4c6f3ec2e4ec25d8df3c4590b222 (diff)
quote plus in filenames to work around a bug in the S3 server
(LP: #1003633)
-rw-r--r--debian/changelog2
-rw-r--r--methods/http.cc6
2 files changed, 7 insertions, 1 deletions
diff --git a/debian/changelog b/debian/changelog
index c956f57d3..6c1bb0877 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -26,6 +26,8 @@ apt (0.9.7.8) UNRELEASED; urgency=low
(potentially) used for non deb,dsc content that may contain
spaces, thanks to Daniel Hartwig and Thomas Bushnell
(LP: #1086997)
+ - quote plus in filenames to work around a bug in the S3 server
+ (LP: #1003633)
-- Christian Perrier <bubulle@debian.org> Mon, 24 Dec 2012 07:01:20 +0100
diff --git a/methods/http.cc b/methods/http.cc
index b7e766004..fddf8a78e 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -685,8 +685,12 @@ void HttpMethod::SendReq(FetchItem *Itm,CircleBuf &Out)
pass it on, HTTP/1.1 says the connection should default to keep alive
and we expect the proxy to do this */
if (Proxy.empty() == true || Proxy.Host.empty())
+ {
+ // see LP bugs #1003633 and #1086997. The "+" is encoded as a workaround
+ // for a amazon S3 bug
sprintf(Buf,"GET %s HTTP/1.1\r\nHost: %s\r\nConnection: keep-alive\r\n",
- QuoteString(Uri.Path,"~ ").c_str(),ProperHost.c_str());
+ QuoteString(Uri.Path,"+~ ").c_str(),ProperHost.c_str());
+ }
else
{
/* Generate a cache control header if necessary. We place a max