diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2007-08-04 03:25:17 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2007-08-04 03:25:17 (GMT) |
commit | 0ee5eeb8ffb167d55a746c97c91558cf0e855c94 (patch) | |
tree | 54fc06fa1b35b7a354219541e37dec90dd1354bf | |
parent | 6252083f5fb107a8de87398d36da5efb5e20144c (diff) | |
download | cpython-0ee5eeb8ffb167d55a746c97c91558cf0e855c94.zip cpython-0ee5eeb8ffb167d55a746c97c91558cf0e855c94.tar.gz cpython-0ee5eeb8ffb167d55a746c97c91558cf0e855c94.tar.bz2 |
Fix several more paths from the SSL code.
In particular, watch out for comparing b"" to "". They're not equal,
but you can start at the code asking whether buf == "" for a long time
before realizing that it will never be True.
-rw-r--r-- | Lib/httplib.py | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/Lib/httplib.py b/Lib/httplib.py index 020d5c5..76f7203 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -435,14 +435,13 @@ class HTTPResponse: # do we have a Content-Length? # NOTE: RFC 2616, S4.4, #3 says we ignore this if tr_enc is "chunked" + self.length = None length = self.msg.getheader("content-length") if length and not self.chunked: try: self.length = int(length) except ValueError: - self.length = None - else: - self.length = None + pass # does the body have a fixed length? (of zero) if (status == NO_CONTENT or status == NOT_MODIFIED or @@ -453,9 +452,9 @@ class HTTPResponse: # if the connection remains open, and we aren't using chunked, and # a content-length was not provided, then assume that the connection # WILL close. - if not self.will_close and \ - not self.chunked and \ - self.length is None: + if (not self.will_close and + not self.chunked and + self.length is None): self.will_close = 1 def _check_close(self): @@ -998,11 +997,11 @@ class SSLFile(SharedSocketClient): def __init__(self, sock, ssl, bufsize=None): SharedSocketClient.__init__(self, sock) self._ssl = ssl - self._buf = '' + self._buf = b"" self._bufsize = bufsize or self.__class__.BUFSIZE def _read(self): - buf = '' + buf = b"" # put in a loop so that we retry on transient errors while True: try: @@ -1033,13 +1032,13 @@ class SSLFile(SharedSocketClient): avail = len(self._buf) while size is None or avail < size: s = self._read() - if s == "": + if s == b"": break L.append(s) avail += len(s) - all = "".join(L) + all = b"".join(L) if size is None: - self._buf = "" + self._buf = b"" return all else: self._buf = all[size:] @@ -1047,20 +1046,20 @@ class SSLFile(SharedSocketClient): def readline(self): L = [self._buf] - self._buf = '' + self._buf = b"" while 1: i = L[-1].find("\n") if i >= 0: break s = self._read() - if s == '': + if s == b"": break L.append(s) if i == -1: # loop exited because there is no more data - return "".join(L) + return b"".join(L) else: - all = "".join(L) + all = b"".join(L) # XXX could do enough bookkeeping not to do a 2nd search i = all.find("\n") + 1 line = all[:i] |