summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2019-11-27 10:32:20 -0500
committerGitHub <noreply@github.com>2019-11-27 10:32:20 -0500
commit57a844c6a7719d1ad4e6cd5632e8a9a8ab3c953e (patch)
tree5c78b308651affd7f341ccc4c5d4120f2efd8da0
parent1e96c10cb7ae11ccd1d0e1b7647e1c336f44ca66 (diff)
parent117c927ddce4d753d69f301eac5bb55a9607ff05 (diff)
downloadcherrypy-git-57a844c6a7719d1ad4e6cd5632e8a9a8ab3c953e.tar.gz
Merge pull request #1828 from cherrypy/bugfix/1827-headermap-keytypev18.5.0
Potential fix for HeaderMap issues
-rw-r--r--CHANGES.rst3
-rw-r--r--cherrypy/lib/httputil.py11
2 files changed, 9 insertions, 5 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index 57d3fff1..1697a91f 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,6 +1,9 @@
v18.5.0
-------
+* :issue:`1827`: Fixed issue where bytes values in a ``HeaderMap``
+ would be converted to strings.
+
* :pr:`1826`: Rely on
`jaraco.collections <https://pypi.org/project/jaraco.collections>`_
for its case-insensitive dictionary support.
diff --git a/cherrypy/lib/httputil.py b/cherrypy/lib/httputil.py
index 06004c9c..eedf8d89 100644
--- a/cherrypy/lib/httputil.py
+++ b/cherrypy/lib/httputil.py
@@ -391,12 +391,15 @@ class CaseInsensitiveDict(jaraco.collections.KeyTransformingDict):
"""A case-insensitive dict subclass.
- Each key is changed on entry to str(key).title().
+ Each key is changed on entry to title case.
"""
@staticmethod
def transform_key(key):
- return str(key).title()
+ if key is None:
+ # TODO(#1830): why?
+ return 'None'
+ return key.title()
# TEXT = <any OCTET except CTLs, but including LWS>
@@ -435,9 +438,7 @@ class HeaderMap(CaseInsensitiveDict):
def elements(self, key):
"""Return a sorted list of HeaderElements for the given header."""
- key = str(key).title()
- value = self.get(key)
- return header_elements(key, value)
+ return header_elements(self.transform_key(key), self.get(key))
def values(self, key):
"""Return a sorted list of HeaderElement.value for the given header."""