mirror of
https://github.com/django/django.git
synced 2025-10-26 15:16:09 +00:00
[1.6.x] Fixed #21282 -- Made HttpResponse.serialize_headers accept latin-1
Thanks Raphaël Barrois for the report and the initial patch and
Aymeric Augustin for the review.
Backport of a14f087233 from master.
This commit is contained in:
@@ -128,8 +128,11 @@ class HttpResponseBase(six.Iterator):
|
||||
|
||||
def serialize_headers(self):
|
||||
"""HTTP headers as a bytestring."""
|
||||
def to_bytes(val, encoding):
|
||||
return val if isinstance(val, bytes) else val.encode(encoding)
|
||||
|
||||
headers = [
|
||||
('%s: %s' % (key, value)).encode('us-ascii')
|
||||
(b': '.join([to_bytes(key, 'ascii'), to_bytes(value, 'latin-1')]))
|
||||
for key, value in self._headers.values()
|
||||
]
|
||||
return b'\r\n'.join(headers)
|
||||
@@ -140,7 +143,7 @@ class HttpResponseBase(six.Iterator):
|
||||
__str__ = serialize_headers
|
||||
|
||||
def _convert_to_charset(self, value, charset, mime_encode=False):
|
||||
"""Converts headers key/value to ascii/latin1 native strings.
|
||||
"""Converts headers key/value to ascii/latin-1 native strings.
|
||||
|
||||
`charset` must be 'ascii' or 'latin-1'. If `mime_encode` is True and
|
||||
`value` value can't be represented in the given charset, MIME-encoding
|
||||
@@ -176,7 +179,7 @@ class HttpResponseBase(six.Iterator):
|
||||
|
||||
def __setitem__(self, header, value):
|
||||
header = self._convert_to_charset(header, 'ascii')
|
||||
value = self._convert_to_charset(value, 'latin1', mime_encode=True)
|
||||
value = self._convert_to_charset(value, 'latin-1', mime_encode=True)
|
||||
self._headers[header.lower()] = (header, value)
|
||||
|
||||
def __delitem__(self, header):
|
||||
|
||||
Reference in New Issue
Block a user