summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2011-05-10 15:49:25 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2011-05-10 15:49:25 +0200
commitc34ea12ad509cb34c954ed574a301c3cbede55ec (patch)
treecabd9660a9e9ac793b29f5cd2c6ac703dd93a6ab
parent4992469e453490e4c104a1b6021e48c725c499b8 (diff)
dequote URL taken from Location in redirects as we will otherwise
quote an already quoted string in the request later (Closes: #602412)
-rw-r--r--debian/changelog4
-rw-r--r--methods/http.cc4
-rwxr-xr-xtest/integration/skip-bug-602412-dequote-redirect36
3 files changed, 41 insertions, 3 deletions
diff --git a/debian/changelog b/debian/changelog
index fd10e0fcf..125fa7f70 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -50,8 +50,10 @@ apt (0.8.14.2) UNRELEASED; urgency=low
use the method as a simple standalone downloader
- Location header in redirects should be absolute URI, but some
servers just send an absolute path so still deal with it properly
+ - dequote URL taken from Location in redirects as we will otherwise
+ quote an already quoted string in the request later (Closes: #602412)
- -- David Kalnischkies <kalnischkies@gmail.com> Wed, 27 Apr 2011 17:37:58 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com> Tue, 10 May 2011 15:49:19 +0200
apt (0.8.14.1) unstable; urgency=low
diff --git a/methods/http.cc b/methods/http.cc
index d3e00553c..13f9cbe06 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -961,12 +961,12 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv)
}
else
NextURI.clear();
- NextURI.append(Srv->Location);
+ NextURI.append(DeQuoteString(Srv->Location));
return TRY_AGAIN_OR_REDIRECT;
}
else
{
- NextURI = Srv->Location;
+ NextURI = DeQuoteString(Srv->Location);
return TRY_AGAIN_OR_REDIRECT;
}
/* else pass through for error message */
diff --git a/test/integration/skip-bug-602412-dequote-redirect b/test/integration/skip-bug-602412-dequote-redirect
new file mode 100755
index 000000000..a63d36246
--- /dev/null
+++ b/test/integration/skip-bug-602412-dequote-redirect
@@ -0,0 +1,36 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+if ! which lighttpd > /dev/null; then
+ msgdie 'You need lighttpd for this testcase, sorry…'
+ exit 1
+fi
+
+buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable'
+
+setupaptarchive
+
+echo "server.modules = ( \"mod_redirect\" )
+server.document-root = \"$(readlink -f ./aptarchive)\"
+server.port = 8080
+server.stat-cache-engine = \"disable\"
+url.redirect = ( \"^/pool/(.*)$\" => \"/newpool/\$1\" )" > lighttpd.conf
+
+mv aptarchive/pool aptarchive/newpool
+lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid'
+lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null &
+addtrap "kill $!;"
+
+local APTARCHIVE="file://$(readlink -f ./aptarchive)"
+for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do
+ sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#"
+done
+
+aptget update -qq || msgdie 'apt-get update failed'
+aptget install unrelated --download-only -qq || msgdie 'downloading package failed'
+