mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Merge Issue 11662 from 3.1 branch.
This commit is contained in:
commit
c768ff5d4f
6 changed files with 75 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue