Просмотр исходного кода

dequote URL taken from Location in redirects as we will otherwise
quote an already quoted string in the request later (Closes: #602412)

David Kalnischkies лет назад: 15
Родитель
Сommit
c34ea12ad5
3 измененных файлов с 41 добавлено и 3 удалено
  1. 3 1
      debian/changelog
  2. 2 2
      methods/http.cc
  3. 36 0
      test/integration/skip-bug-602412-dequote-redirect

+ 3 - 1
debian/changelog

@@ -50,8 +50,10 @@ apt (0.8.14.2) UNRELEASED; urgency=low
       use the method as a simple standalone downloader
       use the method as a simple standalone downloader
     - Location header in redirects should be absolute URI, but some
     - Location header in redirects should be absolute URI, but some
       servers just send an absolute path so still deal with it properly
       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
 apt (0.8.14.1) unstable; urgency=low
 
 

+ 2 - 2
methods/http.cc

@@ -961,12 +961,12 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv)
 	 }
 	 }
 	 else
 	 else
 	    NextURI.clear();
 	    NextURI.clear();
-	 NextURI.append(Srv->Location);
+	 NextURI.append(DeQuoteString(Srv->Location));
 	 return TRY_AGAIN_OR_REDIRECT;
 	 return TRY_AGAIN_OR_REDIRECT;
       }
       }
       else
       else
       {
       {
-         NextURI = Srv->Location;
+         NextURI = DeQuoteString(Srv->Location);
          return TRY_AGAIN_OR_REDIRECT;
          return TRY_AGAIN_OR_REDIRECT;
       }
       }
       /* else pass through for error message */
       /* else pass through for error message */

+ 36 - 0
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'
+