[3.12] gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233) (#122599)

* gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233)

- Encode header parts that contain newlines

Per RFC 2047:

> [...] these encoding schemes allow the
> encoding of arbitrary octet values, mail readers that implement this
> decoding should also ensure that display of the decoded data on the
> recipient's terminal will not cause unwanted side-effects

It seems that the "quoted-word" scheme is a valid way to include
a newline character in a header value, just like we already allow
undecodable bytes or control characters.
They do need to be properly quoted when serialized to text, though.

- Verify that email headers are well-formed

This should fail for custom fold() implementations that aren't careful
about newlines.

Co-authored-by: Bas Bloemsaat <bas@bloemsaat.org>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
(cherry picked from commit 0976339818)

* Document changes as made in 3.12.5
This commit is contained in:
Petr Viktorin 2024-08-06 19:07:19 +02:00 committed by GitHub
parent 01db0e404d
commit 4766d1200f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 168 additions and 4 deletions

View file

@ -58,6 +58,13 @@ The following exception classes are defined in the :mod:`email.errors` module:
:class:`~email.mime.nonmultipart.MIMENonMultipart` (e.g.
:class:`~email.mime.image.MIMEImage`).
.. exception:: HeaderWriteError()
Raised when an error occurs when the :mod:`~email.generator` outputs
headers.
.. exception:: MessageDefect()
This is the base class for all defects found when parsing email messages.