mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
[3.10] gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233) (#122609)
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.
This should fail for custom fold() implementations that aren't careful
about newlines.
(cherry picked from commit 0976339818)
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Bas Bloemsaat <bas@bloemsaat.org>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
743acbe872
commit
06f28dc236
10 changed files with 162 additions and 4 deletions
|
|
@ -59,6 +59,12 @@ The following exception classes are defined in the :mod:`email.errors` module:
|
|||
:class:`~email.mime.image.MIMEImage`).
|
||||
|
||||
|
||||
.. exception:: HeaderWriteError()
|
||||
|
||||
Raised when an error occurs when the :mod:`~email.generator` outputs
|
||||
headers.
|
||||
|
||||
|
||||
Here is the list of the defects that the :class:`~email.parser.FeedParser`
|
||||
can find while parsing messages. Note that the defects are added to the message
|
||||
where the problem was found, so for example, if a message nested inside a
|
||||
|
|
|
|||
|
|
@ -229,6 +229,24 @@ added matters. To illustrate::
|
|||
|
||||
.. versionadded:: 3.6
|
||||
|
||||
|
||||
.. attribute:: verify_generated_headers
|
||||
|
||||
If ``True`` (the default), the generator will raise
|
||||
:exc:`~email.errors.HeaderWriteError` instead of writing a header
|
||||
that is improperly folded or delimited, such that it would
|
||||
be parsed as multiple headers or joined with adjacent data.
|
||||
Such headers can be generated by custom header classes or bugs
|
||||
in the ``email`` module.
|
||||
|
||||
As it's a security feature, this defaults to ``True`` even in the
|
||||
:class:`~email.policy.Compat32` policy.
|
||||
For backwards compatible, but unsafe, behavior, it must be set to
|
||||
``False`` explicitly.
|
||||
|
||||
.. versionadded:: 3.10.15
|
||||
|
||||
|
||||
The following :class:`Policy` method is intended to be called by code using
|
||||
the email library to create policy instances with custom settings:
|
||||
|
||||
|
|
|
|||
|
|
@ -2372,3 +2372,15 @@ ipaddress
|
|||
|
||||
* Fixed ``is_global`` and ``is_private`` behavior in ``IPv4Address``,
|
||||
``IPv6Address``, ``IPv4Network`` and ``IPv6Network``.
|
||||
|
||||
email
|
||||
-----
|
||||
|
||||
* Headers with embedded newlines are now quoted on output.
|
||||
|
||||
The :mod:`~email.generator` will now refuse to serialize (write) headers
|
||||
that are improperly folded or delimited, such that they would be parsed as
|
||||
multiple headers or joined with adjacent data.
|
||||
If you need to turn this safety feature off,
|
||||
set :attr:`~email.policy.Policy.verify_generated_headers`.
|
||||
(Contributed by Bas Bloemsaat and Petr Viktorin in :gh:`121650`.)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue