Bug #767111: fix long-standing bug in urllib which caused an

AttributeError instead of an IOError when the server's response didn't
contain a valid HTTP status line.
This commit is contained in:
Georg Brandl 2007-03-14 08:27:52 +00:00
parent 90fd76a2b4
commit f66b6039c1
3 changed files with 21 additions and 0 deletions

View File

@ -122,6 +122,15 @@ class urlopen_HttpTests(unittest.TestCase):
finally: finally:
self.unfakehttp() self.unfakehttp()
def test_empty_socket(self):
"""urlopen() raises IOError if the underlying socket does not send any
data. (#1680230) """
self.fakehttp('')
try:
self.assertRaises(IOError, urllib.urlopen, 'http://something')
finally:
self.unfakehttp()
class urlretrieve_FileTests(unittest.TestCase): class urlretrieve_FileTests(unittest.TestCase):
"""Test urllib.urlretrieve() on local files""" """Test urllib.urlretrieve() on local files"""

View File

@ -326,6 +326,10 @@ class URLopener:
if data is not None: if data is not None:
h.send(data) h.send(data)
errcode, errmsg, headers = h.getreply() errcode, errmsg, headers = h.getreply()
if errcode == -1:
# something went wrong with the HTTP status line
raise IOError, ('http protocol error', 0,
'got a bad status line', None)
fp = h.getfile() fp = h.getfile()
if errcode == 200: if errcode == 200:
return addinfourl(fp, headers, "http:" + url) return addinfourl(fp, headers, "http:" + url)
@ -413,6 +417,10 @@ class URLopener:
if data is not None: if data is not None:
h.send(data) h.send(data)
errcode, errmsg, headers = h.getreply() errcode, errmsg, headers = h.getreply()
if errcode == -1:
# something went wrong with the HTTP status line
raise IOError, ('http protocol error', 0,
'got a bad status line', None)
fp = h.getfile() fp = h.getfile()
if errcode == 200: if errcode == 200:
return addinfourl(fp, headers, "https:" + url) return addinfourl(fp, headers, "https:" + url)

View File

@ -170,6 +170,10 @@ Core and builtins
Library Library
------- -------
- Bug #767111: fix long-standing bug in urllib which caused an
AttributeError instead of an IOError when the server's response didn't
contain a valid HTTP status line.
- Patch #957650: "%var%" environment variable references are now properly - Patch #957650: "%var%" environment variable references are now properly
expanded in ntpath.expandvars(), also "~user" home directory references expanded in ntpath.expandvars(), also "~user" home directory references
are recognized and handled on Windows. are recognized and handled on Windows.