diff --git a/tests/httpwrappers/tests.py b/tests/httpwrappers/tests.py index f68524a484..7ee20f9ce9 100644 --- a/tests/httpwrappers/tests.py +++ b/tests/httpwrappers/tests.py @@ -364,6 +364,27 @@ class HttpResponseTests(SimpleTestCase): with self.assertRaises(BadHeaderError): r.headers.__setitem__("test\nstr", "test") + def test_encoded_with_newlines_in_headers(self): + """ + Keys & values which throw a UnicodeError when encoding/decoding should + still be checked for newlines and re-raised as a BadHeaderError. + These specifically would still throw BadHeaderError after decoding + successfully, because the newlines are sandwiched in the middle of the + string and email.Header leaves those as they are. + """ + r = HttpResponse() + pairs = ( + ("†\nother", "test"), + ("test", "†\nother"), + (b"\xe2\x80\xa0\nother", "test"), + ("test", b"\xe2\x80\xa0\nother"), + ) + msg = "Header values can't contain newlines" + for key, value in pairs: + with self.subTest(key=key, value=value): + with self.assertRaisesMessage(BadHeaderError, msg): + r[key] = value + def test_dict_behavior(self): """ Test for bug #14020: Make HttpResponse.get work like dict.get