summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenthil Kumaran <senthil@uthcode.com>2012-01-21 03:43:02 (GMT)
committerSenthil Kumaran <senthil@uthcode.com>2012-01-21 03:43:02 (GMT)
commit58c60620689cac234fa8e860412e3d7af354c776 (patch)
treeffe6fc517e6c3cd1e8dc8937feb7e2d8e3d27a35
parent631c25800068ce8f1d97157fd4d173a82ba32e62 (diff)
downloadcpython-58c60620689cac234fa8e860412e3d7af354c776.zip
cpython-58c60620689cac234fa8e860412e3d7af354c776.tar.gz
cpython-58c60620689cac234fa8e860412e3d7af354c776.tar.bz2
Fix Issue6631 - Disallow relative files paths in urllib*.open()
-rw-r--r--Lib/test/test_urllib.py3
-rw-r--r--Lib/test/test_urllib2net.py2
-rw-r--r--Lib/urllib.py2
3 files changed, 7 insertions, 0 deletions
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 085eecf..91aeb2f 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -134,6 +134,9 @@ class urlopen_FileTests(unittest.TestCase):
for line in self.returned_obj.__iter__():
self.assertEqual(line, self.text)
+ def test_relativelocalfile(self):
+ self.assertRaises(ValueError,urllib.urlopen,'./' + self.pathname)
+
class ProxyTests(unittest.TestCase):
def setUp(self):
diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py
index bd2c467..dcdbfe8 100644
--- a/Lib/test/test_urllib2net.py
+++ b/Lib/test/test_urllib2net.py
@@ -126,6 +126,8 @@ class OtherNetworkTests(unittest.TestCase):
finally:
os.remove(TESTFN)
+ self.assertRaises(ValueError, urllib2.urlopen,'./relative_path/to/file')
+
# XXX Following test depends on machine configurations that are internal
# to CNRI. Need to set up a public server with the right authentication
# configuration for test purposes.
diff --git a/Lib/urllib.py b/Lib/urllib.py
index c7af8ec..a73c5d7 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -484,6 +484,8 @@ class URLopener:
urlfile = file
if file[:1] == '/':
urlfile = 'file://' + file
+ elif file[:2] == './':
+ raise ValueError("local file url may start with / or file:. Unknown url of type: %s" % url)
return addinfourl(open(localname, 'rb'),
headers, urlfile)
host, port = splitport(host)