Fix Issue2244 - urllib unquotes user and password info multiple times - Patch by Theodore Turocy
This commit is contained in:
parent
d8b661dd90
commit
daa29d01b7
|
@ -631,22 +631,32 @@ class HandlerTests(unittest.TestCase):
|
|||
h = NullFTPHandler(data)
|
||||
o = h.parent = MockOpener()
|
||||
|
||||
for url, host, port, type_, dirs, filename, mimetype in [
|
||||
for url, host, port, user, passwd, type_, dirs, filename, mimetype in [
|
||||
("ftp://localhost/foo/bar/baz.html",
|
||||
"localhost", ftplib.FTP_PORT, "I",
|
||||
"localhost", ftplib.FTP_PORT, "", "", "I",
|
||||
["foo", "bar"], "baz.html", "text/html"),
|
||||
("ftp://parrot@localhost/foo/bar/baz.html",
|
||||
"localhost", ftplib.FTP_PORT, "parrot", "", "I",
|
||||
["foo", "bar"], "baz.html", "text/html"),
|
||||
("ftp://%25parrot@localhost/foo/bar/baz.html",
|
||||
"localhost", ftplib.FTP_PORT, "%parrot", "", "I",
|
||||
["foo", "bar"], "baz.html", "text/html"),
|
||||
("ftp://%2542parrot@localhost/foo/bar/baz.html",
|
||||
"localhost", ftplib.FTP_PORT, "%42parrot", "", "I",
|
||||
["foo", "bar"], "baz.html", "text/html"),
|
||||
("ftp://localhost:80/foo/bar/",
|
||||
"localhost", 80, "D",
|
||||
"localhost", 80, "", "", "D",
|
||||
["foo", "bar"], "", None),
|
||||
("ftp://localhost/baz.gif;type=a",
|
||||
"localhost", ftplib.FTP_PORT, "A",
|
||||
"localhost", ftplib.FTP_PORT, "", "", "A",
|
||||
[], "baz.gif", None), # XXX really this should guess image/gif
|
||||
]:
|
||||
req = Request(url)
|
||||
req.timeout = None
|
||||
r = h.ftp_open(req)
|
||||
# ftp authentication not yet implemented by FTPHandler
|
||||
self.assertTrue(h.user == h.passwd == "")
|
||||
self.assertEqual(h.user, user)
|
||||
self.assertEqual(h.passwd, passwd)
|
||||
self.assertEqual(h.host, socket.gethostbyname(host))
|
||||
self.assertEqual(h.port, port)
|
||||
self.assertEqual(h.dirs, dirs)
|
||||
|
|
|
@ -711,7 +711,7 @@ def splituser(host):
|
|||
_userprog = re.compile('^(.*)@(.*)$')
|
||||
|
||||
match = _userprog.match(host)
|
||||
if match: return map(unquote, match.group(1, 2))
|
||||
if match: return match.group(1, 2)
|
||||
return None, host
|
||||
|
||||
_passwdprog = None
|
||||
|
|
|
@ -1300,8 +1300,8 @@ class FTPHandler(BaseHandler):
|
|||
else:
|
||||
passwd = None
|
||||
host = unquote(host)
|
||||
user = unquote(user or '')
|
||||
passwd = unquote(passwd or '')
|
||||
user = user or ''
|
||||
passwd = passwd or ''
|
||||
|
||||
try:
|
||||
host = socket.gethostbyname(host)
|
||||
|
|
Loading…
Reference in New Issue