summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_urllib2.py
diff options
context:
space:
mode:
authorguido@google.com <guido@google.com>2011-03-29 19:02:49 (GMT)
committerguido@google.com <guido@google.com>2011-03-29 19:02:49 (GMT)
commit2008a8f8c09b18fbd24e8039553d50a828dd3fb2 (patch)
treec78fd200fde6b54d7c1138fed8b0cbe840b583c7 /Lib/test/test_urllib2.py
parentd4652fab512910ef501b6c62aca5f19bf18bfe74 (diff)
parentc768ff5d4f69f94455db82646e004fac4d11876e (diff)
downloadcpython-2008a8f8c09b18fbd24e8039553d50a828dd3fb2.zip
cpython-2008a8f8c09b18fbd24e8039553d50a828dd3fb2.tar.gz
cpython-2008a8f8c09b18fbd24e8039553d50a828dd3fb2.tar.bz2
Merge Issue 11662 from 3.2 branch.
Diffstat (limited to 'Lib/test/test_urllib2.py')
-rw-r--r--Lib/test/test_urllib2.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index 1d0d98c..113c10d 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -10,6 +10,7 @@ import urllib.request
# The proxy bypass method imported below has logic specific to the OSX
# proxy config data structure but is testable on all platforms.
from urllib.request import Request, OpenerDirector, _proxy_bypass_macosx_sysconf
+import urllib.error
# XXX
# Request
@@ -1031,6 +1032,29 @@ class HandlerTests(unittest.TestCase):
self.assertEqual(count,
urllib.request.HTTPRedirectHandler.max_redirections)
+
+ def test_invalid_redirect(self):
+ from_url = "http://example.com/a.html"
+ valid_schemes = ['http','https','ftp']
+ invalid_schemes = ['file','imap','ldap']
+ schemeless_url = "example.com/b.html"
+ h = urllib.request.HTTPRedirectHandler()
+ o = h.parent = MockOpener()
+ req = Request(from_url)
+ req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
+
+ for scheme in invalid_schemes:
+ invalid_url = scheme + '://' + schemeless_url
+ self.assertRaises(urllib.error.HTTPError, h.http_error_302,
+ req, MockFile(), 302, "Security Loophole",
+ MockHeaders({"location": invalid_url}))
+
+ for scheme in valid_schemes:
+ valid_url = scheme + '://' + schemeless_url
+ h.http_error_302(req, MockFile(), 302, "That's fine",
+ MockHeaders({"location": valid_url}))
+ self.assertEqual(o.req.get_full_url(), valid_url)
+
def test_cookie_redirect(self):
# cookies shouldn't leak into redirected requests
from http.cookiejar import CookieJar