diff options
author | Georg Brandl <georg@python.org> | 2007-03-14 08:27:57 +0000 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2007-03-14 08:27:57 +0000 |
commit | 027ac24650f0cb48d0391ce34749ddfb29419f57 (patch) | |
tree | dad6df1c1c34eb9b5ee5356398b43586fb528cb4 | |
parent | 12e8fe63e2d7f10bd1ef43b3c4160d3b42e62223 (diff) | |
download | cpython-git-027ac24650f0cb48d0391ce34749ddfb29419f57.tar.gz |
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.
(backport from rev. 54376)
-rw-r--r-- | Lib/test/test_urllib.py | 9 | ||||
-rw-r--r-- | Lib/urllib.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
3 files changed, 21 insertions, 0 deletions
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index 4579c479d1..294ed5e06a 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -122,6 +122,15 @@ class urlopen_HttpTests(unittest.TestCase): finally: 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): """Test urllib.urlretrieve() on local files""" diff --git a/Lib/urllib.py b/Lib/urllib.py index 9fbb19a419..963187cfb2 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -326,6 +326,10 @@ class URLopener: if data is not None: h.send(data) 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() if errcode == 200: return addinfourl(fp, headers, "http:" + url) @@ -413,6 +417,10 @@ class URLopener: if data is not None: h.send(data) 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() if errcode == 200: return addinfourl(fp, headers, "https:" + url) @@ -205,6 +205,10 @@ Extension Modules 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 #1449244: Support Unicode strings in email.message.Message.{set_charset,get_content_charset}. |