Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
f1509306
Commit
f1509306
authored
Mar 28, 2011
by
guido@google.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add tests for the urllib[2] vulnerability. Change to raise exceptions.
parent
2bc23b84
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
45 additions
and
5 deletions
+45
-5
Lib/test/test_urllib.py
Lib/test/test_urllib.py
+14
-0
Lib/test/test_urllib2.py
Lib/test/test_urllib2.py
+21
-0
Lib/urllib.py
Lib/urllib.py
+6
-4
Lib/urllib2.py
Lib/urllib2.py
+4
-1
No files found.
Lib/test/test_urllib.py
View file @
f1509306
...
...
@@ -122,6 +122,20 @@ class urlopen_HttpTests(unittest.TestCase):
finally
:
self
.
unfakehttp
()
def
test_invalid_redirect
(
self
):
# urlopen() should raise IOError for many error codes.
self
.
fakehttp
(
"""HTTP/1.1 302 Found
Date: Wed, 02 Jan 2008 03:03:54 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
Location: file:README
Connection: close
Content-Type: text/html; charset=iso-8859-1
"""
)
try
:
self
.
assertRaises
(
IOError
,
urllib
.
urlopen
,
"http://python.org/"
)
finally
:
self
.
unfakehttp
()
def
test_empty_socket
(
self
):
"""urlopen() raises IOError if the underlying socket does not send any
data. (#1680230) """
...
...
Lib/test/test_urllib2.py
View file @
f1509306
...
...
@@ -857,6 +857,27 @@ class HandlerTests(unittest.TestCase):
self
.
assertEqual
(
count
,
urllib2
.
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
=
urllib2
.
HTTPRedirectHandler
()
o
=
h
.
parent
=
MockOpener
()
req
=
Request
(
from_url
)
for
scheme
in
invalid_schemes
:
invalid_url
=
scheme
+
'://'
+
schemeless_url
self
.
assertRaises
(
urllib2
.
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
cookielib
import
CookieJar
...
...
Lib/urllib.py
View file @
f1509306
...
...
@@ -638,7 +638,8 @@ class FancyURLopener(URLopener):
newurl
=
headers
[
'uri'
]
else
:
return
void
=
fp
.
read
()
fp
.
close
()
# In case the server sent a relative URL, join with original:
newurl
=
basejoin
(
self
.
type
+
":"
+
url
,
newurl
)
...
...
@@ -648,10 +649,11 @@ class FancyURLopener(URLopener):
if
not
(
newurl_lower
.
startswith
(
'http://'
)
or
newurl_lower
.
startswith
(
'https://'
)
or
newurl_lower
.
startswith
(
'ftp://'
)):
return
raise
IOError
(
'redirect error'
,
errcode
,
errmsg
+
" - Redirection to url '%s' is not allowed"
%
newurl
,
headers
)
void
=
fp
.
read
()
fp
.
close
()
return
self
.
open
(
newurl
)
def
http_error_301
(
self
,
url
,
fp
,
errcode
,
errmsg
,
headers
,
data
=
None
):
...
...
Lib/urllib2.py
View file @
f1509306
...
...
@@ -561,7 +561,10 @@ class HTTPRedirectHandler(BaseHandler):
if not (newurl_lower.startswith('http://') or
newurl_lower.startswith('https://') or
newurl_lower.startswith('ftp://')):
return
raise HTTPError(newurl, code,
msg + "
-
Redirection
to
url
'%s'
is
not
allowed
" %
newurl,
headers, fp)
# XXX Probably want to forget about the state of the current
# request, although that might interact poorly with other
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment