mirror of https://github.com/django/django.git
Removed a workaround for a cookie encoding bug [1] in Python < 2.7.2.
[1] http://bugs.python.org/issue9824
This commit is contained in:
parent
38086c83ac
commit
2f81f466a8
|
@ -6,8 +6,6 @@ from django.utils import six
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
from django.utils.six.moves import http_cookies
|
from django.utils.six.moves import http_cookies
|
||||||
|
|
||||||
# Some versions of Python 2.7 and later won't need this encoding bug fix:
|
|
||||||
_cookie_encodes_correctly = http_cookies.SimpleCookie().value_encode(';') == (';', '"\\073"')
|
|
||||||
# See ticket #13007, http://bugs.python.org/issue2193 and http://trac.edgewall.org/ticket/2256
|
# See ticket #13007, http://bugs.python.org/issue2193 and http://trac.edgewall.org/ticket/2256
|
||||||
_tc = http_cookies.SimpleCookie()
|
_tc = http_cookies.SimpleCookie()
|
||||||
try:
|
try:
|
||||||
|
@ -23,7 +21,7 @@ cookie_pickles_properly = (
|
||||||
sys.version_info >= (3, 4, 3)
|
sys.version_info >= (3, 4, 3)
|
||||||
)
|
)
|
||||||
|
|
||||||
if _cookie_encodes_correctly and _cookie_allows_colon_in_names and cookie_pickles_properly:
|
if _cookie_allows_colon_in_names and cookie_pickles_properly:
|
||||||
SimpleCookie = http_cookies.SimpleCookie
|
SimpleCookie = http_cookies.SimpleCookie
|
||||||
else:
|
else:
|
||||||
Morsel = http_cookies.Morsel
|
Morsel = http_cookies.Morsel
|
||||||
|
@ -39,31 +37,6 @@ else:
|
||||||
else:
|
else:
|
||||||
super(SimpleCookie, self).__setitem__(key, value)
|
super(SimpleCookie, self).__setitem__(key, value)
|
||||||
|
|
||||||
if not _cookie_encodes_correctly:
|
|
||||||
def value_encode(self, val):
|
|
||||||
# Some browsers do not support quoted-string from RFC 2109,
|
|
||||||
# including some versions of Safari and Internet Explorer.
|
|
||||||
# These browsers split on ';', and some versions of Safari
|
|
||||||
# are known to split on ', '. Therefore, we encode ';' and ','
|
|
||||||
|
|
||||||
# SimpleCookie already does the hard work of encoding and decoding.
|
|
||||||
# It uses octal sequences like '\\012' for newline etc.
|
|
||||||
# and non-ASCII chars. We just make use of this mechanism, to
|
|
||||||
# avoid introducing two encoding schemes which would be confusing
|
|
||||||
# and especially awkward for javascript.
|
|
||||||
|
|
||||||
# NB, contrary to Python docs, value_encode returns a tuple containing
|
|
||||||
# (real val, encoded_val)
|
|
||||||
val, encoded = super(SimpleCookie, self).value_encode(val)
|
|
||||||
|
|
||||||
encoded = encoded.replace(";", "\\073").replace(",", "\\054")
|
|
||||||
# If encoded now contains any quoted chars, we need double quotes
|
|
||||||
# around the whole string.
|
|
||||||
if "\\" in encoded and not encoded.startswith('"'):
|
|
||||||
encoded = '"' + encoded + '"'
|
|
||||||
|
|
||||||
return val, encoded
|
|
||||||
|
|
||||||
if not _cookie_allows_colon_in_names:
|
if not _cookie_allows_colon_in_names:
|
||||||
def load(self, rawdata):
|
def load(self, rawdata):
|
||||||
self.bad_cookies = set()
|
self.bad_cookies = set()
|
||||||
|
|
Loading…
Reference in New Issue