mirror of https://github.com/python/cpython.git
gh-100734: What's New in 3.x: Add missing detail from 3.x branch (#114689)
This commit is contained in:
parent
298bcdc185
commit
cfb26401f6
|
@ -2992,6 +2992,33 @@ Changes to Python's build process and to the C API include:
|
||||||
architectures (x86, PowerPC), 64-bit (x86-64 and PPC-64), or both.
|
architectures (x86, PowerPC), 64-bit (x86-64 and PPC-64), or both.
|
||||||
(Contributed by Ronald Oussoren.)
|
(Contributed by Ronald Oussoren.)
|
||||||
|
|
||||||
|
* A new function added in Python 2.6.6, :c:func:`!PySys_SetArgvEx`, sets
|
||||||
|
the value of ``sys.argv`` and can optionally update ``sys.path`` to
|
||||||
|
include the directory containing the script named by ``sys.argv[0]``
|
||||||
|
depending on the value of an *updatepath* parameter.
|
||||||
|
|
||||||
|
This function was added to close a security hole for applications
|
||||||
|
that embed Python. The old function, :c:func:`!PySys_SetArgv`, would
|
||||||
|
always update ``sys.path``, and sometimes it would add the current
|
||||||
|
directory. This meant that, if you ran an application embedding
|
||||||
|
Python in a directory controlled by someone else, attackers could
|
||||||
|
put a Trojan-horse module in the directory (say, a file named
|
||||||
|
:file:`os.py`) that your application would then import and run.
|
||||||
|
|
||||||
|
If you maintain a C/C++ application that embeds Python, check
|
||||||
|
whether you're calling :c:func:`!PySys_SetArgv` and carefully consider
|
||||||
|
whether the application should be using :c:func:`!PySys_SetArgvEx`
|
||||||
|
with *updatepath* set to false. Note that using this function will
|
||||||
|
break compatibility with Python versions 2.6.5 and earlier; if you
|
||||||
|
have to continue working with earlier versions, you can leave
|
||||||
|
the call to :c:func:`!PySys_SetArgv` alone and call
|
||||||
|
``PyRun_SimpleString("sys.path.pop(0)\n")`` afterwards to discard
|
||||||
|
the first ``sys.path`` component.
|
||||||
|
|
||||||
|
Security issue reported as `CVE-2008-5983
|
||||||
|
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5983>`_;
|
||||||
|
discussed in :gh:`50003`, and fixed by Antoine Pitrou.
|
||||||
|
|
||||||
* The BerkeleyDB module now has a C API object, available as
|
* The BerkeleyDB module now has a C API object, available as
|
||||||
``bsddb.db.api``. This object can be used by other C extensions
|
``bsddb.db.api``. This object can be used by other C extensions
|
||||||
that wish to use the :mod:`bsddb` module for their own purposes.
|
that wish to use the :mod:`bsddb` module for their own purposes.
|
||||||
|
@ -3294,6 +3321,15 @@ that may require changes to your code:
|
||||||
scoping rules, also cause warnings because such comparisons are forbidden
|
scoping rules, also cause warnings because such comparisons are forbidden
|
||||||
entirely in 3.0.
|
entirely in 3.0.
|
||||||
|
|
||||||
|
For applications that embed Python:
|
||||||
|
|
||||||
|
* The :c:func:`!PySys_SetArgvEx` function was added in Python 2.6.6,
|
||||||
|
letting applications close a security hole when the existing
|
||||||
|
:c:func:`!PySys_SetArgv` function was used. Check whether you're
|
||||||
|
calling :c:func:`!PySys_SetArgv` and carefully consider whether the
|
||||||
|
application should be using :c:func:`!PySys_SetArgvEx` with
|
||||||
|
*updatepath* set to false.
|
||||||
|
|
||||||
.. ======================================================================
|
.. ======================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,28 @@ Support was also added for third-party tools like `PyYAML <https://pyyaml.org/>`
|
||||||
PEP written by Armin Ronacher and Raymond Hettinger. Implementation
|
PEP written by Armin Ronacher and Raymond Hettinger. Implementation
|
||||||
written by Raymond Hettinger.
|
written by Raymond Hettinger.
|
||||||
|
|
||||||
|
Since an ordered dictionary remembers its insertion order, it can be used
|
||||||
|
in conjuction with sorting to make a sorted dictionary::
|
||||||
|
|
||||||
|
>>> # regular unsorted dictionary
|
||||||
|
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
|
||||||
|
|
||||||
|
>>> # dictionary sorted by key
|
||||||
|
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
|
||||||
|
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
|
||||||
|
|
||||||
|
>>> # dictionary sorted by value
|
||||||
|
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
|
||||||
|
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
|
||||||
|
|
||||||
|
>>> # dictionary sorted by length of the key string
|
||||||
|
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
|
||||||
|
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
|
||||||
|
|
||||||
|
The new sorted dictionaries maintain their sort order when entries
|
||||||
|
are deleted. But when new keys are added, the keys are appended
|
||||||
|
to the end and the sort is not maintained.
|
||||||
|
|
||||||
|
|
||||||
PEP 378: Format Specifier for Thousands Separator
|
PEP 378: Format Specifier for Thousands Separator
|
||||||
=================================================
|
=================================================
|
||||||
|
|
|
@ -1517,6 +1517,13 @@ functions internally. For more details, please see their respective
|
||||||
documentation.
|
documentation.
|
||||||
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
||||||
|
|
||||||
|
The presence of newline or tab characters in parts of a URL allows for some
|
||||||
|
forms of attacks. Following the WHATWG specification that updates :rfc:`3986`,
|
||||||
|
ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the
|
||||||
|
URL by the parser in :mod:`urllib.parse` preventing such attacks. The removal
|
||||||
|
characters are controlled by a new module level variable
|
||||||
|
``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :gh:`88048`)
|
||||||
|
|
||||||
xml
|
xml
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -2315,3 +2322,43 @@ Removed
|
||||||
|
|
||||||
* The ``PyThreadState.use_tracing`` member has been removed to optimize Python.
|
* The ``PyThreadState.use_tracing`` member has been removed to optimize Python.
|
||||||
(Contributed by Mark Shannon in :issue:`43760`.)
|
(Contributed by Mark Shannon in :issue:`43760`.)
|
||||||
|
|
||||||
|
|
||||||
|
Notable security feature in 3.10.7
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Converting between :class:`int` and :class:`str` in bases other than 2
|
||||||
|
(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal)
|
||||||
|
now raises a :exc:`ValueError` if the number of digits in string form is
|
||||||
|
above a limit to avoid potential denial of service attacks due to the
|
||||||
|
algorithmic complexity. This is a mitigation for `CVE-2020-10735
|
||||||
|
<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735>`_.
|
||||||
|
This limit can be configured or disabled by environment variable, command
|
||||||
|
line flag, or :mod:`sys` APIs. See the :ref:`integer string conversion
|
||||||
|
length limitation <int_max_str_digits>` documentation. The default limit
|
||||||
|
is 4300 digits in string form.
|
||||||
|
|
||||||
|
Notable security feature in 3.10.8
|
||||||
|
==================================
|
||||||
|
|
||||||
|
The deprecated :mod:`!mailcap` module now refuses to inject unsafe text
|
||||||
|
(filenames, MIME types, parameters) into shell commands. Instead of using such
|
||||||
|
text, it will warn and act as if a match was not found (or for test commands,
|
||||||
|
as if the test failed).
|
||||||
|
(Contributed by Petr Viktorin in :gh:`98966`.)
|
||||||
|
|
||||||
|
Notable changes in 3.10.12
|
||||||
|
==========================
|
||||||
|
|
||||||
|
tarfile
|
||||||
|
-------
|
||||||
|
|
||||||
|
* The extraction methods in :mod:`tarfile`, and :func:`shutil.unpack_archive`,
|
||||||
|
have a new a *filter* argument that allows limiting tar features than may be
|
||||||
|
surprising or dangerous, such as creating files outside the destination
|
||||||
|
directory.
|
||||||
|
See :ref:`tarfile-extraction-filter` for details.
|
||||||
|
In Python 3.12, use without the *filter* argument will show a
|
||||||
|
:exc:`DeprecationWarning`.
|
||||||
|
In Python 3.14, the default will switch to ``'data'``.
|
||||||
|
(Contributed by Petr Viktorin in :pep:`706`.)
|
||||||
|
|
|
@ -1956,6 +1956,8 @@ Build Changes
|
||||||
:file:`!configure`.
|
:file:`!configure`.
|
||||||
(Contributed by Christian Heimes in :gh:`89886`.)
|
(Contributed by Christian Heimes in :gh:`89886`.)
|
||||||
|
|
||||||
|
* Windows builds and macOS installers from python.org now use OpenSSL 3.0.
|
||||||
|
|
||||||
|
|
||||||
C API Changes
|
C API Changes
|
||||||
=============
|
=============
|
||||||
|
|
|
@ -1472,6 +1472,10 @@ Server and client-side specific TLS protocols for :class:`~ssl.SSLContext`
|
||||||
were added.
|
were added.
|
||||||
(Contributed by Christian Heimes in :issue:`28085`.)
|
(Contributed by Christian Heimes in :issue:`28085`.)
|
||||||
|
|
||||||
|
Added :attr:`ssl.SSLContext.post_handshake_auth` to enable and
|
||||||
|
:meth:`ssl.SSLSocket.verify_client_post_handshake` to initiate TLS 1.3
|
||||||
|
post-handshake authentication.
|
||||||
|
(Contributed by Christian Heimes in :gh:`78851`.)
|
||||||
|
|
||||||
statistics
|
statistics
|
||||||
----------
|
----------
|
||||||
|
@ -2063,6 +2067,15 @@ connected to and thus what Python interpreter will be used by the virtual
|
||||||
environment. (Contributed by Brett Cannon in :issue:`25154`.)
|
environment. (Contributed by Brett Cannon in :issue:`25154`.)
|
||||||
|
|
||||||
|
|
||||||
|
xml
|
||||||
|
---
|
||||||
|
|
||||||
|
* As mitigation against DTD and external entity retrieval, the
|
||||||
|
:mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process
|
||||||
|
external entities by default.
|
||||||
|
(Contributed by Christian Heimes in :gh:`61441`.)
|
||||||
|
|
||||||
|
|
||||||
Deprecated functions and types of the C API
|
Deprecated functions and types of the C API
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
|
@ -2430,9 +2443,13 @@ The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``
|
||||||
locale to the ``LC_NUMERIC`` locale in some cases.
|
locale to the ``LC_NUMERIC`` locale in some cases.
|
||||||
(Contributed by Victor Stinner in :issue:`31900`.)
|
(Contributed by Victor Stinner in :issue:`31900`.)
|
||||||
|
|
||||||
|
|
||||||
Notable changes in Python 3.6.7
|
Notable changes in Python 3.6.7
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
|
:mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process
|
||||||
|
external entities by default. See also :gh:`61441`.
|
||||||
|
|
||||||
In 3.6.7 the :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token
|
In 3.6.7 the :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token
|
||||||
when provided with input that does not have a trailing new line. This behavior
|
when provided with input that does not have a trailing new line. This behavior
|
||||||
now matches what the C tokenizer does internally.
|
now matches what the C tokenizer does internally.
|
||||||
|
@ -2460,3 +2477,19 @@ separator key, with ``&`` as the default. This change also affects
|
||||||
functions internally. For more details, please see their respective
|
functions internally. For more details, please see their respective
|
||||||
documentation.
|
documentation.
|
||||||
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
||||||
|
|
||||||
|
Notable changes in Python 3.6.14
|
||||||
|
================================
|
||||||
|
|
||||||
|
A security fix alters the :class:`ftplib.FTP` behavior to not trust the
|
||||||
|
IPv4 address sent from the remote server when setting up a passive data
|
||||||
|
channel. We reuse the ftp server IP address instead. For unusual code
|
||||||
|
requiring the old behavior, set a ``trust_server_pasv_ipv4_address``
|
||||||
|
attribute on your FTP instance to ``True``. (See :gh:`87451`)
|
||||||
|
|
||||||
|
The presence of newline or tab characters in parts of a URL allows for some
|
||||||
|
forms of attacks. Following the WHATWG specification that updates RFC 3986,
|
||||||
|
ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the
|
||||||
|
URL by the parser :func:`urllib.parse` preventing such attacks. The removal
|
||||||
|
characters are controlled by a new module level variable
|
||||||
|
``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :gh:`88048`)
|
||||||
|
|
|
@ -1380,6 +1380,10 @@ Supported protocols are indicated by several new flags, such as
|
||||||
:data:`~ssl.HAS_TLSv1_1`.
|
:data:`~ssl.HAS_TLSv1_1`.
|
||||||
(Contributed by Christian Heimes in :issue:`32609`.)
|
(Contributed by Christian Heimes in :issue:`32609`.)
|
||||||
|
|
||||||
|
Added :attr:`ssl.SSLContext.post_handshake_auth` to enable and
|
||||||
|
:meth:`ssl.SSLSocket.verify_client_post_handshake` to initiate TLS 1.3
|
||||||
|
post-handshake authentication.
|
||||||
|
(Contributed by Christian Heimes in :gh:`78851`.)
|
||||||
|
|
||||||
string
|
string
|
||||||
------
|
------
|
||||||
|
@ -1599,6 +1603,15 @@ at the interactive prompt. See :ref:`whatsnew37-pep565` for details.
|
||||||
(Contributed by Nick Coghlan in :issue:`31975`.)
|
(Contributed by Nick Coghlan in :issue:`31975`.)
|
||||||
|
|
||||||
|
|
||||||
|
xml
|
||||||
|
---
|
||||||
|
|
||||||
|
As mitigation against DTD and external entity retrieval, the
|
||||||
|
:mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process
|
||||||
|
external entities by default.
|
||||||
|
(Contributed by Christian Heimes in :gh:`61441`.)
|
||||||
|
|
||||||
|
|
||||||
xml.etree
|
xml.etree
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
@ -2571,3 +2584,34 @@ separator key, with ``&`` as the default. This change also affects
|
||||||
functions internally. For more details, please see their respective
|
functions internally. For more details, please see their respective
|
||||||
documentation.
|
documentation.
|
||||||
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
||||||
|
|
||||||
|
Notable changes in Python 3.7.11
|
||||||
|
================================
|
||||||
|
|
||||||
|
A security fix alters the :class:`ftplib.FTP` behavior to not trust the
|
||||||
|
IPv4 address sent from the remote server when setting up a passive data
|
||||||
|
channel. We reuse the ftp server IP address instead. For unusual code
|
||||||
|
requiring the old behavior, set a ``trust_server_pasv_ipv4_address``
|
||||||
|
attribute on your FTP instance to ``True``. (See :gh:`87451`)
|
||||||
|
|
||||||
|
|
||||||
|
The presence of newline or tab characters in parts of a URL allows for some
|
||||||
|
forms of attacks. Following the WHATWG specification that updates RFC 3986,
|
||||||
|
ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the
|
||||||
|
URL by the parser :func:`urllib.parse` preventing such attacks. The removal
|
||||||
|
characters are controlled by a new module level variable
|
||||||
|
``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :gh:`88048`)
|
||||||
|
|
||||||
|
Notable security feature in 3.7.14
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Converting between :class:`int` and :class:`str` in bases other than 2
|
||||||
|
(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal)
|
||||||
|
now raises a :exc:`ValueError` if the number of digits in string form is
|
||||||
|
above a limit to avoid potential denial of service attacks due to the
|
||||||
|
algorithmic complexity. This is a mitigation for `CVE-2020-10735
|
||||||
|
<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735>`_.
|
||||||
|
This limit can be configured or disabled by environment variable, command
|
||||||
|
line flag, or :mod:`sys` APIs. See the :ref:`integer string conversion
|
||||||
|
length limitation <int_max_str_digits>` documentation. The default limit
|
||||||
|
is 4300 digits in string form.
|
||||||
|
|
|
@ -2243,6 +2243,21 @@ details, see the documentation for ``loop.create_datagram_endpoint()``.
|
||||||
(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in
|
(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in
|
||||||
:issue:`37228`.)
|
:issue:`37228`.)
|
||||||
|
|
||||||
|
Notable changes in Python 3.8.2
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Fixed a regression with the ``ignore`` callback of :func:`shutil.copytree`.
|
||||||
|
The argument types are now str and List[str] again.
|
||||||
|
(Contributed by Manuel Barkhau and Giampaolo Rodola in :gh:`83571`.)
|
||||||
|
|
||||||
|
Notable changes in Python 3.8.3
|
||||||
|
===============================
|
||||||
|
|
||||||
|
The constant values of future flags in the :mod:`__future__` module
|
||||||
|
are updated in order to prevent collision with compiler flags. Previously
|
||||||
|
``PyCF_ALLOW_TOP_LEVEL_AWAIT`` was clashing with ``CO_FUTURE_DIVISION``.
|
||||||
|
(Contributed by Batuhan Taskaya in :gh:`83743`)
|
||||||
|
|
||||||
Notable changes in Python 3.8.8
|
Notable changes in Python 3.8.8
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
|
@ -2256,9 +2271,55 @@ functions internally. For more details, please see their respective
|
||||||
documentation.
|
documentation.
|
||||||
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
||||||
|
|
||||||
|
Notable changes in Python 3.8.9
|
||||||
|
===============================
|
||||||
|
|
||||||
|
A security fix alters the :class:`ftplib.FTP` behavior to not trust the
|
||||||
|
IPv4 address sent from the remote server when setting up a passive data
|
||||||
|
channel. We reuse the ftp server IP address instead. For unusual code
|
||||||
|
requiring the old behavior, set a ``trust_server_pasv_ipv4_address``
|
||||||
|
attribute on your FTP instance to ``True``. (See :gh:`87451`)
|
||||||
|
|
||||||
|
Notable changes in Python 3.8.10
|
||||||
|
================================
|
||||||
|
|
||||||
|
macOS 11.0 (Big Sur) and Apple Silicon Mac support
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
As of 3.8.10, Python now supports building and running on macOS 11
|
||||||
|
(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture).
|
||||||
|
A new universal build variant, ``universal2``, is now available to natively
|
||||||
|
support both ``ARM64`` and ``Intel 64`` in one set of executables.
|
||||||
|
Note that support for "weaklinking", building binaries targeted for newer
|
||||||
|
versions of macOS that will also run correctly on older versions by
|
||||||
|
testing at runtime for missing features, is not included in this backport
|
||||||
|
from Python 3.9; to support a range of macOS versions, continue to target
|
||||||
|
for and build on the oldest version in the range.
|
||||||
|
|
||||||
|
(Originally contributed by Ronald Oussoren and Lawrence D'Anna in :gh:`85272`,
|
||||||
|
with fixes by FX Coudert and Eli Rykoff, and backported to 3.8 by Maxime Bélanger
|
||||||
|
and Ned Deily)
|
||||||
|
|
||||||
|
Notable changes in Python 3.8.10
|
||||||
|
================================
|
||||||
|
|
||||||
|
urllib.parse
|
||||||
|
------------
|
||||||
|
|
||||||
|
The presence of newline or tab characters in parts of a URL allows for some
|
||||||
|
forms of attacks. Following the WHATWG specification that updates :rfc:`3986`,
|
||||||
|
ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the
|
||||||
|
URL by the parser in :mod:`urllib.parse` preventing such attacks. The removal
|
||||||
|
characters are controlled by a new module level variable
|
||||||
|
``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :issue:`43882`)
|
||||||
|
|
||||||
|
|
||||||
Notable changes in Python 3.8.12
|
Notable changes in Python 3.8.12
|
||||||
================================
|
================================
|
||||||
|
|
||||||
|
Changes in the Python API
|
||||||
|
-------------------------
|
||||||
|
|
||||||
Starting with Python 3.8.12 the :mod:`ipaddress` module no longer accepts
|
Starting with Python 3.8.12 the :mod:`ipaddress` module no longer accepts
|
||||||
any leading zeros in IPv4 address strings. Leading zeros are ambiguous and
|
any leading zeros in IPv4 address strings. Leading zeros are ambiguous and
|
||||||
interpreted as octal notation by some libraries. For example the legacy
|
interpreted as octal notation by some libraries. For example the legacy
|
||||||
|
@ -2268,3 +2329,33 @@ any leading zeros.
|
||||||
|
|
||||||
(Originally contributed by Christian Heimes in :issue:`36384`, and backported
|
(Originally contributed by Christian Heimes in :issue:`36384`, and backported
|
||||||
to 3.8 by Achraf Merzouki.)
|
to 3.8 by Achraf Merzouki.)
|
||||||
|
|
||||||
|
Notable security feature in 3.8.14
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Converting between :class:`int` and :class:`str` in bases other than 2
|
||||||
|
(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal)
|
||||||
|
now raises a :exc:`ValueError` if the number of digits in string form is
|
||||||
|
above a limit to avoid potential denial of service attacks due to the
|
||||||
|
algorithmic complexity. This is a mitigation for `CVE-2020-10735
|
||||||
|
<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735>`_.
|
||||||
|
This limit can be configured or disabled by environment variable, command
|
||||||
|
line flag, or :mod:`sys` APIs. See the :ref:`integer string conversion
|
||||||
|
length limitation <int_max_str_digits>` documentation. The default limit
|
||||||
|
is 4300 digits in string form.
|
||||||
|
|
||||||
|
Notable changes in 3.8.17
|
||||||
|
=========================
|
||||||
|
|
||||||
|
tarfile
|
||||||
|
-------
|
||||||
|
|
||||||
|
* The extraction methods in :mod:`tarfile`, and :func:`shutil.unpack_archive`,
|
||||||
|
have a new a *filter* argument that allows limiting tar features than may be
|
||||||
|
surprising or dangerous, such as creating files outside the destination
|
||||||
|
directory.
|
||||||
|
See :ref:`tarfile-extraction-filter` for details.
|
||||||
|
In Python 3.12, use without the *filter* argument will show a
|
||||||
|
:exc:`DeprecationWarning`.
|
||||||
|
In Python 3.14, the default will switch to ``'data'``.
|
||||||
|
(Contributed by Petr Viktorin in :pep:`706`.)
|
||||||
|
|
|
@ -1562,3 +1562,55 @@ separator key, with ``&`` as the default. This change also affects
|
||||||
functions internally. For more details, please see their respective
|
functions internally. For more details, please see their respective
|
||||||
documentation.
|
documentation.
|
||||||
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
|
||||||
|
|
||||||
|
Notable changes in Python 3.9.3
|
||||||
|
===============================
|
||||||
|
|
||||||
|
A security fix alters the :class:`ftplib.FTP` behavior to not trust the
|
||||||
|
IPv4 address sent from the remote server when setting up a passive data
|
||||||
|
channel. We reuse the ftp server IP address instead. For unusual code
|
||||||
|
requiring the old behavior, set a ``trust_server_pasv_ipv4_address``
|
||||||
|
attribute on your FTP instance to ``True``. (See :gh:`87451`)
|
||||||
|
|
||||||
|
Notable changes in Python 3.9.5
|
||||||
|
===============================
|
||||||
|
|
||||||
|
urllib.parse
|
||||||
|
------------
|
||||||
|
|
||||||
|
The presence of newline or tab characters in parts of a URL allows for some
|
||||||
|
forms of attacks. Following the WHATWG specification that updates :rfc:`3986`,
|
||||||
|
ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the
|
||||||
|
URL by the parser in :mod:`urllib.parse` preventing such attacks. The removal
|
||||||
|
characters are controlled by a new module level variable
|
||||||
|
``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :gh:`88048`)
|
||||||
|
|
||||||
|
Notable security feature in 3.9.14
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Converting between :class:`int` and :class:`str` in bases other than 2
|
||||||
|
(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal)
|
||||||
|
now raises a :exc:`ValueError` if the number of digits in string form is
|
||||||
|
above a limit to avoid potential denial of service attacks due to the
|
||||||
|
algorithmic complexity. This is a mitigation for `CVE-2020-10735
|
||||||
|
<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735>`_.
|
||||||
|
This limit can be configured or disabled by environment variable, command
|
||||||
|
line flag, or :mod:`sys` APIs. See the :ref:`integer string conversion
|
||||||
|
length limitation <int_max_str_digits>` documentation. The default limit
|
||||||
|
is 4300 digits in string form.
|
||||||
|
|
||||||
|
Notable changes in 3.9.17
|
||||||
|
=========================
|
||||||
|
|
||||||
|
tarfile
|
||||||
|
-------
|
||||||
|
|
||||||
|
* The extraction methods in :mod:`tarfile`, and :func:`shutil.unpack_archive`,
|
||||||
|
have a new a *filter* argument that allows limiting tar features than may be
|
||||||
|
surprising or dangerous, such as creating files outside the destination
|
||||||
|
directory.
|
||||||
|
See :ref:`tarfile-extraction-filter` for details.
|
||||||
|
In Python 3.12, use without the *filter* argument will show a
|
||||||
|
:exc:`DeprecationWarning`.
|
||||||
|
In Python 3.14, the default will switch to ``'data'``.
|
||||||
|
(Contributed by Petr Viktorin in :pep:`706`.)
|
||||||
|
|
Loading…
Reference in New Issue