dequote URL taken from Location in redirects as we will otherwise
authorDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 10 May 2011 13:49:25 +0000 (15:49 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 10 May 2011 13:49:25 +0000 (15:49 +0200)
quote an already quoted string in the request later (Closes: #602412)

debian/changelog
methods/http.cc
test/integration/skip-bug-602412-dequote-redirect [new file with mode: 0755]

index fd10e0f..125fa7f 100644 (file)
@@ -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
 
index d3e0055..13f9cbe 100644 (file)
@@ -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 (executable)
index 0000000..a63d362
--- /dev/null
@@ -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'
+