Fix empty body canonicalization for relaxed canonicalization (LP: #1727319)

This commit is contained in:
Scott Kitterman
2017-11-21 07:13:01 -05:00
3 changed files with 51 additions and 2 deletions
+9 -2
View File
@@ -48,6 +48,13 @@ def unfold_header_value(content):
return re.sub(b"\r\n", b"", content)
def correct_empty_body(content):
if content == b"\r\n":
return b""
else:
return content
class Simple:
"""Class that represents the "simple" canonicalization algorithm."""
@@ -85,8 +92,8 @@ class Relaxed:
# Remove all trailing WSP at end of lines.
# Compress non-line-ending WSP to single space.
# Ignore all empty lines at the end of the message body.
return strip_trailing_lines(
compress_whitespace(strip_trailing_whitespace(body)))
return correct_empty_body(strip_trailing_lines(
compress_whitespace(strip_trailing_whitespace(body))))
class CanonicalizationPolicy:
+40
View File
@@ -53,6 +53,26 @@ class TestSimpleAlgorithmBody(BaseCanonicalizationTest):
b'Foo \tbar \r\n',
b'Foo \tbar \r\n\r\n')
def test_adds_crlf(self):
self.assertCanonicalForm(
b'Foo bar\r\n',
b'Foo bar')
def test_empty_body(self):
self.assertCanonicalForm(
b'\r\n',
b'')
def test_single_crlf_body(self):
self.assertCanonicalForm(
b'\r\n',
b'\r\n')
def test_multiple_crlf_body(self):
self.assertCanonicalForm(
b'\r\n',
b'\r\n\r\n')
class TestRelaxedAlgorithmHeaders(BaseCanonicalizationTest):
@@ -98,6 +118,26 @@ class TestRelaxedAlgorithmBody(BaseCanonicalizationTest):
b'Foo\r\nbar\r\n',
b'Foo\r\nbar\r\n\r\n\r\n')
def test_adds_crlf(self):
self.assertCanonicalForm(
b'Foo bar\r\n',
b'Foo bar')
def test_empty_body(self):
self.assertCanonicalForm(
b'',
b'')
def test_single_crlf_body(self):
self.assertCanonicalForm(
b'',
b'\r\n')
def test_multiple_crlf_body(self):
self.assertCanonicalForm(
b'',
b'\r\n\r\n')
class TestCanonicalizationPolicyFromCValue(unittest.TestCase):