diff options
Diffstat (limited to 'Lib/http')
-rw-r--r-- | Lib/http/client.py | 10 | ||||
-rw-r--r-- | Lib/http/cookies.py | 30 | ||||
-rw-r--r-- | Lib/http/server.py | 33 |
3 files changed, 20 insertions, 53 deletions
diff --git a/Lib/http/client.py b/Lib/http/client.py index a8e59b9561..0234199dfa 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -72,7 +72,6 @@ import email.parser import email.message import http import io -import os import re import socket import collections @@ -642,14 +641,7 @@ class HTTPResponse(io.BufferedIOBase): return self._read1_chunked(n) if self.length is not None and (n < 0 or n > self.length): n = self.length - try: - result = self.fp.read1(n) - except ValueError: - if n >= 0: - raise - # some implementations, like BufferedReader, don't support -1 - # Read an arbitrarily selected largeish chunk. - result = self.fp.read1(16*1024) + result = self.fp.read1(n) if not result and n: self._close_conn() elif self.length is not None: diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py index be3b080aa3..7e0259ee32 100644 --- a/Lib/http/cookies.py +++ b/Lib/http/cookies.py @@ -138,12 +138,6 @@ _nulljoin = ''.join _semispacejoin = '; '.join _spacejoin = ' '.join -def _warn_deprecated_setter(setter): - import warnings - msg = ('The .%s setter is deprecated. The attribute will be read-only in ' - 'future releases. Please use the set() method instead.' % setter) - warnings.warn(msg, DeprecationWarning, stacklevel=3) - # # Define an exception visible to External modules # @@ -303,29 +297,14 @@ class Morsel(dict): def key(self): return self._key - @key.setter - def key(self, key): - _warn_deprecated_setter('key') - self._key = key - @property def value(self): return self._value - @value.setter - def value(self, value): - _warn_deprecated_setter('value') - self._value = value - @property def coded_value(self): return self._coded_value - @coded_value.setter - def coded_value(self, coded_value): - _warn_deprecated_setter('coded_value') - self._coded_value = coded_value - def __setitem__(self, K, V): K = K.lower() if not K in self._reserved: @@ -366,14 +345,7 @@ class Morsel(dict): def isReservedKey(self, K): return K.lower() in self._reserved - def set(self, key, val, coded_val, LegalChars=_LegalChars): - if LegalChars != _LegalChars: - import warnings - warnings.warn( - 'LegalChars parameter is deprecated, ignored and will ' - 'be removed in future versions.', DeprecationWarning, - stacklevel=2) - + def set(self, key, val, coded_val): if key.lower() in self._reserved: raise CookieError('Attempt to set a reserved key %r' % (key,)) if not _is_legal_key(key): diff --git a/Lib/http/server.py b/Lib/http/server.py index e12e45bfc3..61ddecc7ef 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -267,8 +267,8 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): are in self.command, self.path, self.request_version and self.headers. - Return True for success, False for failure; on failure, an - error is sent back. + Return True for success, False for failure; on failure, any relevant + error response has already been sent back. """ self.command = None # set in case of error on the first line @@ -278,10 +278,13 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): requestline = requestline.rstrip('\r\n') self.requestline = requestline words = requestline.split() - if len(words) == 3: - command, path, version = words + if len(words) == 0: + return False + + if len(words) >= 3: # Enough to determine protocol version + version = words[-1] try: - if version[:5] != 'HTTP/': + if not version.startswith('HTTP/'): raise ValueError base_version_number = version.split('/', 1)[1] version_number = base_version_number.split(".") @@ -306,22 +309,22 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): HTTPStatus.HTTP_VERSION_NOT_SUPPORTED, "Invalid HTTP version (%s)" % base_version_number) return False - elif len(words) == 2: - command, path = words + self.request_version = version + + if not 2 <= len(words) <= 3: + self.send_error( + HTTPStatus.BAD_REQUEST, + "Bad request syntax (%r)" % requestline) + return False + command, path = words[:2] + if len(words) == 2: self.close_connection = True if command != 'GET': self.send_error( HTTPStatus.BAD_REQUEST, "Bad HTTP/0.9 request type (%r)" % command) return False - elif not words: - return False - else: - self.send_error( - HTTPStatus.BAD_REQUEST, - "Bad request syntax (%r)" % requestline) - return False - self.command, self.path, self.request_version = command, path, version + self.command, self.path = command, path # Examine the headers and look for a Connection directive. try: |