diff -r f130ce67387d Lib/test/test_urllib2.py --- a/Lib/test/test_urllib2.py Tue Apr 10 14:50:39 2012 -0400 +++ b/Lib/test/test_urllib2.py Sat Jul 07 16:02:38 2012 +0200 @@ -830,6 +830,31 @@ p_ds_req = h.do_request_(ds_req) self.assertEqual(p_ds_req.unredirected_hdrs["Host"],"example.com") + def test_http_urlerror_raised_when_bad_status_line(self): + h = urllib2.AbstractHTTPHandler() + request = Request("http://www.python.org/") + request.timeout = socket._GLOBAL_DEFAULT_TIMEOUT + + from httplib import BadStatusLine + + class MockHTTPClassAlwaysBadStatusLine(object): + def __call__(self, host, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): + self.host = host + self.timeout = timeout + return self + + def set_debuglevel(self, level): + self.level = level + + def request(self, method, url, body=None, headers={}): + pass + + def getresponse(self): + raise BadStatusLine("HTTP/1.1 1024 MADEUP") + + mockHttp = MockHTTPClassAlwaysBadStatusLine() + self.assertRaises(urllib2.URLError, h.do_open, mockHttp, request) + def test_errors(self): h = urllib2.HTTPErrorProcessor() o = h.parent = MockOpener() diff -r f130ce67387d Lib/urllib2.py --- a/Lib/urllib2.py Tue Apr 10 14:50:39 2012 -0400 +++ b/Lib/urllib2.py Sat Jul 07 16:02:38 2012 +0200 @@ -1152,7 +1152,7 @@ try: h.request(req.get_method(), req.get_selector(), req.data, headers) r = h.getresponse() - except socket.error, err: # XXX what error? + except (socket.error, httplib.BadStatusLine) as err: # XXX what error? raise URLError(err) # Pick apart the HTTPResponse object to get the addinfourl