cpython/Lib/email
Petr Viktorin 4766d1200f
[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
2024-08-06 19:07:19 +02:00
..
mime gh-102498 Clean up unused variables and imports in the email module (#102482) 2023-04-24 19:19:28 +00:00
__init__.py gh-102507 Remove invisible pagebreak characters (#102531) 2023-03-08 13:58:14 +00:00
_encoded_words.py bpo-43323: Fix UnicodeEncodeError in the email module (GH-32137) 2022-04-30 13:17:23 +03:00
_header_value_parser.py [3.12] gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233) (#122599) 2024-08-06 19:07:19 +02:00
_parseaddr.py gh-95087: Fix IndexError in parsing invalid date in the email module (GH-95201) 2022-07-25 09:17:25 +03:00
_policybase.py [3.12] gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233) (#122599) 2024-08-06 19:07:19 +02:00
architecture.rst Fix typos in multiple .rst files (#1668) 2017-05-19 23:37:57 +03:00
base64mime.py gh-102507 Remove invisible pagebreak characters (#102531) 2023-03-08 13:58:14 +00:00
charset.py gh-102498 Clean up unused variables and imports in the email module (#102482) 2023-04-24 19:19:28 +00:00
contentmanager.py bpo-46565: del loop vars that are leaking into module namespaces (GH-30993) 2022-02-03 11:20:08 +02:00
encoders.py gh-102507 Remove invisible pagebreak characters (#102531) 2023-03-08 13:58:14 +00:00
errors.py [3.12] gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233) (#122599) 2024-08-06 19:07:19 +02:00
feedparser.py [3.12] gh-106186: Don't report MultipartInvariantViolationDefect for valid multipart emails when parsing header only (GH-107016) (#107111) 2023-07-23 14:28:28 +02:00
generator.py [3.12] gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233) (#122599) 2024-08-06 19:07:19 +02:00
header.py gh-102507 Remove invisible pagebreak characters (#102531) 2023-03-08 13:58:14 +00:00
headerregistry.py bpo-26579: Add object.__getstate__(). (GH-2821) 2022-04-06 20:00:14 +03:00
iterators.py gh-102507 Remove invisible pagebreak characters (#102531) 2023-03-08 13:58:14 +00:00
message.py [3.12] gh-80361: Fix TypeError in email.Message.get_payload() (GH-117994) (GH-117998) 2024-04-17 16:59:35 +00:00
parser.py gh-102507 Remove invisible pagebreak characters (#102531) 2023-03-08 13:58:14 +00:00
policy.py [3.12] gh-117313: Fix re-folding email messages containing non-standard line separators (GH-117369) (GH-117971) 2024-04-17 10:48:56 +00:00
quoprimime.py bpo-46565: del loop vars that are leaking into module namespaces (GH-30993) 2022-02-03 11:20:08 +02:00
utils.py [3.12] gh-121905: Consistently use "floating-point" instead of "floating point" (GH-121907) (GH-122013) 2024-07-19 09:08:33 +00:00