https://github.com/python/cpython/commit/df793163d5821791d4e7caf88885a2c11a107986
commit: df793163d5821791d4e7caf88885a2c11a107986
branch: 3.14
author: Hugo van Kemenade <[email protected]>
committer: hugovk <[email protected]>
date: 2025-12-05T18:49:16+02:00
summary:

Python 3.14.2

files:
A Misc/NEWS.d/3.14.2.rst
D 
Misc/NEWS.d/next/Core_and_Builtins/2025-12-01-10-03-08.gh-issue-116738.972YsG.rst
D 
Misc/NEWS.d/next/Core_and_Builtins/2025-12-03-11-03-35.gh-issue-142218.44Fq_J.rst
D Misc/NEWS.d/next/Library/2025-12-03-06-12-39.gh-issue-142214.appYNZ.rst
D Misc/NEWS.d/next/Library/2025-12-03-09-36-29.gh-issue-142206.ilwegH.rst
D Misc/NEWS.d/next/Library/2025-12-05-17-58-29.gh-issue-140797.YxB27u.rst
D Misc/NEWS.d/next/Security/2024-05-23-11-44-41.gh-issue-119452.PRfsSv.rst
D Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst
M Include/patchlevel.h
M Lib/pydoc_data/topics.py
M README.rst

diff --git a/Include/patchlevel.h b/Include/patchlevel.h
index 1a53949b163416..3ff6be5838882c 100644
--- a/Include/patchlevel.h
+++ b/Include/patchlevel.h
@@ -19,12 +19,12 @@
 /*--start constants--*/
 #define PY_MAJOR_VERSION        3
 #define PY_MINOR_VERSION        14
-#define PY_MICRO_VERSION        1
+#define PY_MICRO_VERSION        2
 #define PY_RELEASE_LEVEL        PY_RELEASE_LEVEL_FINAL
 #define PY_RELEASE_SERIAL       0
 
 /* Version as a string */
-#define PY_VERSION              "3.14.1+"
+#define PY_VERSION              "3.14.2"
 /*--end constants--*/
 
 
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index dd9bda6e14c6f2..56317b8a7244de 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,4 +1,4 @@
-# Autogenerated by Sphinx on Tue Dec  2 14:51:32 2025
+# Autogenerated by Sphinx on Fri Dec  5 18:49:09 2025
 # as part of the release process.
 
 topics = {
@@ -6260,78 +6260,31 @@ def whats_on_the_telly(penguin=None):
 "NAME" tokens represent *identifiers*, *keywords*, and *soft
 keywords*.
 
-Within the ASCII range (U+0001..U+007F), the valid characters for
-names include the uppercase and lowercase letters ("A-Z" and "a-z"),
-the underscore "_" and, except for the first character, the digits "0"
-through "9".
+Names are composed of the following characters:
 
-Names must contain at least one character, but have no upper length
-limit. Case is significant.
-
-Besides "A-Z", "a-z", "_" and "0-9", names can also use “letter-like”
-and “number-like” characters from outside the ASCII range, as detailed
-below.
-
-All identifiers are converted into the normalization form NFKC while
-parsing; comparison of identifiers is based on NFKC.
-
-Formally, the first character of a normalized identifier must belong
-to the set "id_start", which is the union of:
-
-* Unicode category "<Lu>" - uppercase letters (includes "A" to "Z")
-
-* Unicode category "<Ll>" - lowercase letters (includes "a" to "z")
+* uppercase and lowercase letters ("A-Z" and "a-z"),
 
-* Unicode category "<Lt>" - titlecase letters
+* the underscore ("_"),
 
-* Unicode category "<Lm>" - modifier letters
+* digits ("0" through "9"), which cannot appear as the first
+  character, and
 
-* Unicode category "<Lo>" - other letters
+* non-ASCII characters. Valid names may only contain “letter-like” and
+  “digit-like” characters; see Non-ASCII characters in names for
+  details.
 
-* Unicode category "<Nl>" - letter numbers
-
-* {""_""} - the underscore
-
-* "<Other_ID_Start>" - an explicit set of characters in PropList.txt
-  to support backwards compatibility
-
-The remaining characters must belong to the set "id_continue", which
-is the union of:
-
-* all characters in "id_start"
-
-* Unicode category "<Nd>" - decimal numbers (includes "0" to "9")
-
-* Unicode category "<Pc>" - connector punctuations
-
-* Unicode category "<Mn>" - nonspacing marks
-
-* Unicode category "<Mc>" - spacing combining marks
-
-* "<Other_ID_Continue>" - another explicit set of characters in
-  PropList.txt to support backwards compatibility
-
-Unicode categories use the version of the Unicode Character Database
-as included in the "unicodedata" module.
+Names must contain at least one character, but have no upper length
+limit. Case is significant.
 
-These sets are based on the Unicode standard annex UAX-31. See also
-**PEP 3131** for further details.
+Formally, names are described by the following lexical definitions:
 
-Even more formally, names are described by the following lexical
-definitions:
+   NAME:          name_start name_continue*
+   name_start:    "a"..."z" | "A"..."Z" | "_" | <non-ASCII character>
+   name_continue: name_start | "0"..."9"
+   identifier:    <NAME, except keywords>
 
-   NAME:         xid_start xid_continue*
-   id_start:     <Lu> | <Ll> | <Lt> | <Lm> | <Lo> | <Nl> | "_" | 
<Other_ID_Start>
-   id_continue:  id_start | <Nd> | <Pc> | <Mn> | <Mc> | <Other_ID_Continue>
-   xid_start:    <all characters in id_start whose NFKC normalization is
-                  in (id_start xid_continue*)">
-   xid_continue: <all characters in id_continue whose NFKC normalization is
-                  in (id_continue*)">
-   identifier:   <NAME, except keywords>
-
-A non-normative listing of all valid identifier characters as defined
-by Unicode is available in the DerivedCoreProperties.txt file in the
-Unicode Character Database.
+Note that not all names matched by this grammar are valid; see Non-
+ASCII characters in names for details.
 
 
 Keywords
@@ -6414,6 +6367,101 @@ def whats_on_the_telly(penguin=None):
    context of a class definition, are re-written to use a mangled form
    to help avoid name clashes between “private” attributes of base and
    derived classes. See section Identifiers (Names).
+
+
+Non-ASCII characters in names
+=============================
+
+Names that contain non-ASCII characters need additional normalization
+and validation beyond the rules and grammar explained above. For
+example, "ř_1", "蛇", or "साँप"  are valid names, but "r〰2", "€", or
+"🐍" are not.
+
+This section explains the exact rules.
+
+All names are converted into the normalization form NFKC while
+parsing. This means that, for example, some typographic variants of
+characters are converted to their “basic” form. For example,
+"fiⁿₐˡᵢᶻₐᵗᵢᵒₙ" normalizes to "finalization", so Python treats them as
+the same name:
+
+   >>> fiⁿₐˡᵢᶻₐᵗᵢᵒₙ = 3
+   >>> finalization
+   3
+
+Note:
+
+  Normalization is done at the lexical level only. Run-time functions
+  that take names as *strings* generally do not normalize their
+  arguments. For example, the variable defined above is accessible at
+  run time in the "globals()" dictionary as
+  "globals()["finalization"]" but not "globals()["fiⁿₐˡᵢᶻₐᵗᵢᵒₙ"]".
+
+Similarly to how ASCII-only names must contain only letters, digits
+and the underscore, and cannot start with a digit, a valid name must
+start with a character in the “letter-like” set "xid_start", and the
+remaining characters must be in the “letter- and digit-like” set
+"xid_continue".
+
+These sets based on the *XID_Start* and *XID_Continue* sets as defined
+by the Unicode standard annex UAX-31. Python’s "xid_start"
+additionally includes the underscore ("_"). Note that Python does not
+necessarily conform to UAX-31.
+
+A non-normative listing of characters in the *XID_Start* and
+*XID_Continue* sets as defined by Unicode is available in the
+DerivedCoreProperties.txt file in the Unicode Character Database. For
+reference, the construction rules for the "xid_*" sets are given
+below.
+
+The set "id_start" is defined as the union of:
+
+* Unicode category "<Lu>" - uppercase letters (includes "A" to "Z")
+
+* Unicode category "<Ll>" - lowercase letters (includes "a" to "z")
+
+* Unicode category "<Lt>" - titlecase letters
+
+* Unicode category "<Lm>" - modifier letters
+
+* Unicode category "<Lo>" - other letters
+
+* Unicode category "<Nl>" - letter numbers
+
+* {""_""} - the underscore
+
+* "<Other_ID_Start>" - an explicit set of characters in PropList.txt
+  to support backwards compatibility
+
+The set "xid_start" then closes this set under NFKC normalization, by
+removing all characters whose normalization is not of the form
+"id_start id_continue*".
+
+The set "id_continue" is defined as the union of:
+
+* "id_start" (see above)
+
+* Unicode category "<Nd>" - decimal numbers (includes "0" to "9")
+
+* Unicode category "<Pc>" - connector punctuations
+
+* Unicode category "<Mn>" - nonspacing marks
+
+* Unicode category "<Mc>" - spacing combining marks
+
+* "<Other_ID_Continue>" - another explicit set of characters in
+  PropList.txt to support backwards compatibility
+
+Again, "xid_continue" closes this set under NFKC normalization.
+
+Unicode categories use the version of the Unicode Character Database
+as included in the "unicodedata" module.
+
+See also:
+
+  * **PEP 3131** – Supporting Non-ASCII Identifiers
+
+  * **PEP 672** – Unicode-related Security Considerations for Python
 ''',
     'if': r'''The "if" statement
 ******************
@@ -10859,119 +10907,56 @@ class is used in a class pattern with positional 
arguments, each
 
 Added in version 3.6.
 
-A *formatted string literal* or *f-string* is a string literal that is
-prefixed with ‘"f"’ or ‘"F"’.  These strings may contain replacement
-fields, which are expressions delimited by curly braces "{}". While
-other string literals always have a constant value, formatted strings
-are really expressions evaluated at run time.
-
-Escape sequences are decoded like in ordinary string literals (except
-when a literal is also marked as a raw string).  After decoding, the
-grammar for the contents of the string is:
-
-   f_string:          (literal_char | "{{" | "}}" | replacement_field)*
-   replacement_field: "{" f_expression ["="] ["!" conversion] [":" 
format_spec] "}"
-   f_expression:      (conditional_expression | "*" or_expr)
-                        ("," conditional_expression | "," "*" or_expr)* [","]
-                      | yield_expression
-   conversion:        "s" | "r" | "a"
-   format_spec:       (literal_char | replacement_field)*
-   literal_char:      <any code point except "{", "}" or NULL>
-
-The parts of the string outside curly braces are treated literally,
-except that any doubled curly braces "'{{'" or "'}}'" are replaced
-with the corresponding single curly brace.  A single opening curly
-bracket "'{'" marks a replacement field, which starts with a Python
-expression. To display both the expression text and its value after
-evaluation, (useful in debugging), an equal sign "'='" may be added
-after the expression. A conversion field, introduced by an exclamation
-point "'!'" may follow.  A format specifier may also be appended,
-introduced by a colon "':'". A replacement field ends with a closing
-curly bracket "'}'".
+Changed in version 3.7: The "await" and "async for" can be used in
+expressions within f-strings.
 
-Expressions in formatted string literals are treated like regular
-Python expressions surrounded by parentheses, with a few exceptions.
-An empty expression is not allowed, and both "lambda"  and assignment
-expressions ":=" must be surrounded by explicit parentheses. Each
-expression is evaluated in the context where the formatted string
-literal appears, in order from left to right.  Replacement expressions
-can contain newlines in both single-quoted and triple-quoted f-strings
-and they can contain comments.  Everything that comes after a "#"
-inside a replacement field is a comment (even closing braces and
-quotes). In that case, replacement fields must be closed in a
-different line.
-
-   >>> f"abc{a # This is a comment }"
-   ... + 3}"
-   'abc5'
+Changed in version 3.8: Added the debug specifier ("=")
 
-Changed in version 3.7: Prior to Python 3.7, an "await" expression and
-comprehensions containing an "async for" clause were illegal in the
-expressions in formatted string literals due to a problem with the
-implementation.
+Changed in version 3.12: Many restrictions on expressions within
+f-strings have been removed. Notably, nested strings, comments, and
+backslashes are now permitted.
 
-Changed in version 3.12: Prior to Python 3.12, comments were not
-allowed inside f-string replacement fields.
-
-When the equal sign "'='" is provided, the output will have the
-expression text, the "'='" and the evaluated value. Spaces after the
-opening brace "'{'", within the expression and after the "'='" are all
-retained in the output. By default, the "'='" causes the "repr()" of
-the expression to be provided, unless there is a format specified.
-When a format is specified it defaults to the "str()" of the
-expression unless a conversion "'!r'" is declared.
-
-Added in version 3.8: The equal sign "'='".
-
-If a conversion is specified, the result of evaluating the expression
-is converted before formatting.  Conversion "'!s'" calls "str()" on
-the result, "'!r'" calls "repr()", and "'!a'" calls "ascii()".
+A *formatted string literal* or *f-string* is a string literal that is
+prefixed with ‘"f"’ or ‘"F"’. Unlike other string literals, f-strings
+do not have a constant value. They may contain *replacement fields*
+delimited by curly braces "{}". Replacement fields contain expressions
+which are evaluated at run time. For example:
+
+   >>> who = 'nobody'
+   >>> nationality = 'Spanish'
+   >>> f'{who.title()} expects the {nationality} Inquisition!'
+   'Nobody expects the Spanish Inquisition!'
+
+Any doubled curly braces ("{{" or "}}") outside replacement fields are
+replaced with the corresponding single curly brace:
+
+   >>> print(f'{{...}}')
+   {...}
+
+Other characters outside replacement fields are treated like in
+ordinary string literals. This means that escape sequences are decoded
+(except when a literal is also marked as a raw string), and newlines
+are possible in triple-quoted f-strings:
+
+   >>> name = 'Galahad'
+   >>> favorite_color = 'blue'
+   >>> print(f'{name}:\\t{favorite_color}')
+   Galahad:       blue
+   >>> print(rf"C:\\Users\\{name}")
+   C:\\Users\\Galahad
+   >>> print(f\'\'\'Three shall be the number of the counting
+   ... and the number of the counting shall be three.\'\'\')
+   Three shall be the number of the counting
+   and the number of the counting shall be three.
 
-The result is then formatted using the "format()" protocol.  The
-format specifier is passed to the "__format__()" method of the
-expression or conversion result.  An empty string is passed when the
-format specifier is omitted.  The formatted result is then included in
-the final value of the whole string.
+Expressions in formatted string literals are treated like regular
+Python expressions. Each expression is evaluated in the context where
+the formatted string literal appears, in order from left to right. An
+empty expression is not allowed, and both "lambda" and assignment
+expressions ":=" must be surrounded by explicit parentheses:
 
-Top-level format specifiers may include nested replacement fields.
-These nested fields may include their own conversion fields and format
-specifiers, but may not include more deeply nested replacement fields.
-The format specifier mini-language is the same as that used by the
-"str.format()" method.
-
-Formatted string literals may be concatenated, but replacement fields
-cannot be split across literals.
-
-Some examples of formatted string literals:
-
-   >>> name = "Fred"
-   >>> f"He said his name is {name!r}."
-   "He said his name is 'Fred'."
-   >>> f"He said his name is {repr(name)}."  # repr() is equivalent to !r
-   "He said his name is 'Fred'."
-   >>> width = 10
-   >>> precision = 4
-   >>> value = decimal.Decimal("12.34567")
-   >>> f"result: {value:{width}.{precision}}"  # nested fields
-   'result:      12.35'
-   >>> today = datetime(year=2017, month=1, day=27)
-   >>> f"{today:%B %d, %Y}"  # using date format specifier
-   'January 27, 2017'
-   >>> f"{today=:%B %d, %Y}" # using date format specifier and debugging
-   'today=January 27, 2017'
-   >>> number = 1024
-   >>> f"{number:#0x}"  # using integer format specifier
-   '0x400'
-   >>> foo = "bar"
-   >>> f"{ foo = }" # preserves whitespace
-   " foo = 'bar'"
-   >>> line = "The mill's closed"
-   >>> f"{line = }"
-   'line = "The mill\\'s closed"'
-   >>> f"{line = :20}"
-   "line = The mill's closed   "
-   >>> f"{line = !r:20}"
-   'line = "The mill\\'s closed" '
+   >>> f'{(half := 1/2)}, {half * 42}'
+   '0.5, 21.0'
 
 Reusing the outer f-string quoting type inside a replacement field is
 permitted:
@@ -10980,10 +10965,6 @@ class is used in a class pattern with positional 
arguments, each
    >>> f"abc {a["x"]} def"
    'abc 2 def'
 
-Changed in version 3.12: Prior to Python 3.12, reuse of the same
-quoting type of the outer f-string inside a replacement field was not
-possible.
-
 Backslashes are also allowed in replacement fields and are evaluated
 the same way as in any other context:
 
@@ -10994,21 +10975,84 @@ class is used in a class pattern with positional 
arguments, each
    b
    c
 
-Changed in version 3.12: Prior to Python 3.12, backslashes were not
-permitted inside an f-string replacement field.
+It is possible to nest f-strings:
+
+   >>> name = 'world'
+   >>> f'Repeated:{f' hello {name}' * 3}'
+   'Repeated: hello world hello world hello world'
 
-Formatted string literals cannot be used as docstrings, even if they
-do not include expressions.
+Portable Python programs should not use more than 5 levels of nesting.
+
+**CPython implementation detail:** CPython does not limit nesting of
+f-strings.
+
+Replacement expressions can contain newlines in both single-quoted and
+triple-quoted f-strings and they can contain comments. Everything that
+comes after a "#" inside a replacement field is a comment (even
+closing braces and quotes). This means that replacement fields with
+comments must be closed in a different line:
+
+   >>> a = 2
+   >>> f"abc{a  # This comment  }"  continues until the end of the line
+   ...       + 3}"
+   'abc5'
+
+After the expression, replacement fields may optionally contain:
+
+* a *debug specifier* – an equal sign ("="), optionally surrounded by
+  whitespace on one or both sides;
+
+* a *conversion specifier* – "!s", "!r" or "!a"; and/or
+
+* a *format specifier* prefixed with a colon (":").
+
+See the Standard Library section on f-strings for details on how these
+fields are evaluated.
+
+As that section explains, *format specifiers* are passed as the second
+argument to the "format()" function to format a replacement field
+value. For example, they can be used to specify a field width and
+padding characters using the Format Specification Mini-Language:
+
+   >>> number = 14.3
+   >>> f'{number:20.7f}'
+   '          14.3000000'
+
+Top-level format specifiers may include nested replacement fields:
+
+   >>> field_size = 20
+   >>> precision = 7
+   >>> f'{number:{field_size}.{precision}f}'
+   '          14.3000000'
+
+These nested fields may include their own conversion fields and format
+specifiers:
+
+   >>> number = 3
+   >>> f'{number:{field_size}}'
+   '                   3'
+   >>> f'{number:{field_size:05}}'
+   '00000000000000000003'
+
+However, these nested fields may not include more deeply nested
+replacement fields.
+
+Formatted string literals cannot be used as *docstrings*, even if they
+do not include expressions:
 
    >>> def foo():
    ...     f"Not a docstring"
    ...
-   >>> foo.__doc__ is None
-   True
+   >>> print(foo.__doc__)
+   None
+
+See also:
 
-See also **PEP 498** for the proposal that added formatted string
-literals, and "str.format()", which uses a related format string
-mechanism.
+  * **PEP 498** – Literal String Interpolation
+
+  * **PEP 701** – Syntactic formalization of f-strings
+
+  * "str.format()", which uses a related format string mechanism.
 
 
 t-strings
@@ -11017,34 +11061,90 @@ class is used in a class pattern with positional 
arguments, each
 Added in version 3.14.
 
 A *template string literal* or *t-string* is a string literal that is
-prefixed with ‘"t"’ or ‘"T"’. These strings follow the same syntax and
-evaluation rules as formatted string literals, with the following
-differences:
-
-* Rather than evaluating to a "str" object, template string literals
-  evaluate to a "string.templatelib.Template" object.
-
-* The "format()" protocol is not used. Instead, the format specifier
-  and conversions (if any) are passed to a new "Interpolation" object
-  that is created for each evaluated expression. It is up to code that
-  processes the resulting "Template" object to decide how to handle
-  format specifiers and conversions.
-
-* Format specifiers containing nested replacement fields are evaluated
-  eagerly, prior to being passed to the "Interpolation" object. For
-  instance, an interpolation of the form "{amount:.{precision}f}" will
-  evaluate the inner expression "{precision}" to determine the value
-  of the "format_spec" attribute. If "precision" were to be "2", the
-  resulting format specifier would be "'.2f'".
-
-* When the equals sign "'='" is provided in an interpolation
-  expression, the text of the expression is appended to the literal
-  string that precedes the relevant interpolation. This includes the
-  equals sign and any surrounding whitespace. The "Interpolation"
-  instance for the expression will be created as normal, except that
-  "conversion" will be set to ‘"r"’ ("repr()") by default. If an
-  explicit conversion or format specifier are provided, this will
-  override the default behaviour.
+prefixed with ‘"t"’ or ‘"T"’. These strings follow the same syntax
+rules as formatted string literals. For differences in evaluation
+rules, see the Standard Library section on t-strings
+
+
+Formal grammar for f-strings
+============================
+
+F-strings are handled partly by the *lexical analyzer*, which produces
+the tokens "FSTRING_START", "FSTRING_MIDDLE" and "FSTRING_END", and
+partly by the parser, which handles expressions in the replacement
+field. The exact way the work is split is a CPython implementation
+detail.
+
+Correspondingly, the f-string grammar is a mix of lexical and
+syntactic definitions.
+
+Whitespace is significant in these situations:
+
+* There may be no whitespace in "FSTRING_START" (between the prefix
+  and quote).
+
+* Whitespace in "FSTRING_MIDDLE" is part of the literal string
+  contents.
+
+* In "fstring_replacement_field", if "f_debug_specifier" is present,
+  all whitespace after the opening brace until the
+  "f_debug_specifier", as well as whitespace immediatelly following
+  "f_debug_specifier", is retained as part of the expression.
+
+  **CPython implementation detail:** The expression is not handled in
+  the tokenization phase; it is retrieved from the source code using
+  locations of the "{" token and the token after "=".
+
+The "FSTRING_MIDDLE" definition uses negative lookaheads ("!") to
+indicate special characters (backslash, newline, "{", "}") and
+sequences ("f_quote").
+
+   fstring:    FSTRING_START fstring_middle* FSTRING_END
+
+   FSTRING_START:      fstringprefix ("'" | '"' | "\'\'\'" | '"""')
+   FSTRING_END:        f_quote
+   fstringprefix:      <("f" | "fr" | "rf"), case-insensitive>
+   f_debug_specifier:  '='
+   f_quote:            <the quote character(s) used in FSTRING_START>
+
+   fstring_middle:
+      | fstring_replacement_field
+      | FSTRING_MIDDLE
+   FSTRING_MIDDLE:
+      | (!"\\" !newline !'{' !'}' !f_quote) source_character
+      | stringescapeseq
+      | "{{"
+      | "}}"
+      | <newline, in triple-quoted f-strings only>
+   fstring_replacement_field:
+      | '{' f_expression [f_debug_specifier] [fstring_conversion]
+            [fstring_full_format_spec] '}'
+   fstring_conversion:
+      | "!" ("s" | "r" | "a")
+   fstring_full_format_spec:
+      | ':' fstring_format_spec*
+   fstring_format_spec:
+      | FSTRING_MIDDLE
+      | fstring_replacement_field
+   f_expression:
+      | ','.(conditional_expression | "*" or_expr)+ [","]
+      | yield_expression
+
+Note:
+
+  In the above grammar snippet, the "f_quote" and "FSTRING_MIDDLE"
+  rules are context-sensitive – they depend on the contents of
+  "FSTRING_START" of the nearest enclosing "fstring".Constructing a
+  more traditional formal grammar from this template is left as an
+  exercise for the reader.
+
+The grammar for t-strings is identical to the one for f-strings, with
+*t* instead of *f* at the beginning of rule and token names and in the
+prefix.
+
+   tstring:    TSTRING_START tstring_middle* TSTRING_END
+
+   <rest of the t-string grammar is omitted; see above>
 ''',
     'subscriptions': r'''Subscriptions
 *************
@@ -11603,7 +11703,7 @@ def foo():
 Sets
    These represent a mutable set. They are created by the built-in
    "set()" constructor and can be modified afterwards by several
-   methods, such as "add".
+   methods, such as "add()".
 
 Frozen sets
    These represent an immutable set.  They are created by the built-in
diff --git a/Misc/NEWS.d/3.14.2.rst b/Misc/NEWS.d/3.14.2.rst
new file mode 100644
index 00000000000000..b4b4c48da22028
--- /dev/null
+++ b/Misc/NEWS.d/3.14.2.rst
@@ -0,0 +1,85 @@
+.. date: 2025-12-01-09-36-45
+.. gh-issue: 142145
+.. nonce: tcAUhg
+.. release date: 2025-12-05
+.. section: Security
+
+Remove quadratic behavior in ``xml.minidom`` node ID cache clearing.
+
+..
+
+.. date: 2024-05-23-11-44-41
+.. gh-issue: 119452
+.. nonce: PRfsSv
+.. section: Security
+
+Fix a potential memory denial of service in the :mod:`http.server` module.
+When a malicious user is connected to the CGI server on Windows, it could
+cause an arbitrary amount of memory to be allocated. This could have led to
+symptoms including a :exc:`MemoryError`, swapping, out of memory (OOM)
+killed processes or containers, or even system crashes.
+
+..
+
+.. date: 2025-12-05-17-58-29
+.. gh-issue: 140797
+.. nonce: YxB27u
+.. section: Library
+
+Revert changes to the undocumented :class:`!re.Scanner` class. Capturing
+groups are still allowed for backward compatibility, although using them can
+lead to incorrect result. They will be forbidden in future Python versions.
+
+..
+
+.. date: 2025-12-03-09-36-29
+.. gh-issue: 142206
+.. nonce: ilwegH
+.. section: Library
+
+The resource tracker in the :mod:`multiprocessing` module now uses the
+original communication protocol, as in Python 3.14.0 and below, by default.
+This avoids issues with upgrading Python while it is running. (Note that
+such 'in-place' upgrades are not tested.) The tracker remains compatible
+with subprocesses that use new protocol (that is, subprocesses using Python
+3.13.10, 3.14.1 and 3.15).
+
+..
+
+.. date: 2025-12-03-06-12-39
+.. gh-issue: 142214
+.. nonce: appYNZ
+.. section: Library
+
+Fix two regressions in :mod:`dataclasses` in Python 3.14.1 related to
+annotations.
+
+* An exception is no longer raised if ``slots=True`` is used and the
+  ``__init__`` method does not have an ``__annotate__`` attribute
+  (likely because ``init=False`` was used).
+
+* An exception is no longer raised if annotations are requested on the
+  ``__init__`` method and one of the fields is not present in the class
+  annotations. This can occur in certain dynamic scenarios.
+
+Patch by Jelle Zijlstra.
+
+..
+
+.. date: 2025-12-03-11-03-35
+.. gh-issue: 142218
+.. nonce: 44Fq_J
+.. section: Core and Builtins
+
+Fix crash when inserting into a split table dictionary with a non
+:class:`str` key that matches an existing key.
+
+..
+
+.. date: 2025-12-01-10-03-08
+.. gh-issue: 116738
+.. nonce: 972YsG
+.. section: Core and Builtins
+
+Fix :mod:`cmath` data race when initializing trigonometric tables with
+subinterpreters.
diff --git 
a/Misc/NEWS.d/next/Core_and_Builtins/2025-12-01-10-03-08.gh-issue-116738.972YsG.rst
 
b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-01-10-03-08.gh-issue-116738.972YsG.rst
deleted file mode 100644
index d6d9d02b017473..00000000000000
--- 
a/Misc/NEWS.d/next/Core_and_Builtins/2025-12-01-10-03-08.gh-issue-116738.972YsG.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-Fix :mod:`cmath` data race when initializing trigonometric tables with
-subinterpreters.
diff --git 
a/Misc/NEWS.d/next/Core_and_Builtins/2025-12-03-11-03-35.gh-issue-142218.44Fq_J.rst
 
b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-03-11-03-35.gh-issue-142218.44Fq_J.rst
deleted file mode 100644
index a8ce0fc65267d5..00000000000000
--- 
a/Misc/NEWS.d/next/Core_and_Builtins/2025-12-03-11-03-35.gh-issue-142218.44Fq_J.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-Fix crash when inserting into a split table dictionary with a non
-:class:`str` key that matches an existing key.
diff --git 
a/Misc/NEWS.d/next/Library/2025-12-03-06-12-39.gh-issue-142214.appYNZ.rst 
b/Misc/NEWS.d/next/Library/2025-12-03-06-12-39.gh-issue-142214.appYNZ.rst
deleted file mode 100644
index b87430ec1a3d65..00000000000000
--- a/Misc/NEWS.d/next/Library/2025-12-03-06-12-39.gh-issue-142214.appYNZ.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-Fix two regressions in :mod:`dataclasses` in Python 3.14.1 related to
-annotations.
-
-* An exception is no longer raised if ``slots=True`` is used and the
-  ``__init__`` method does not have an ``__annotate__`` attribute
-  (likely because ``init=False`` was used).
-
-* An exception is no longer raised if annotations are requested on the
-  ``__init__`` method and one of the fields is not present in the class
-  annotations. This can occur in certain dynamic scenarios.
-
-Patch by Jelle Zijlstra.
diff --git 
a/Misc/NEWS.d/next/Library/2025-12-03-09-36-29.gh-issue-142206.ilwegH.rst 
b/Misc/NEWS.d/next/Library/2025-12-03-09-36-29.gh-issue-142206.ilwegH.rst
deleted file mode 100644
index 2fc2e3098f8c25..00000000000000
--- a/Misc/NEWS.d/next/Library/2025-12-03-09-36-29.gh-issue-142206.ilwegH.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-The resource tracker in the :mod:`multiprocessing` module now uses the
-original communication protocol, as in Python 3.14.0 and below,
-by default.
-This avoids issues with upgrading Python while it is running.
-(Note that such 'in-place' upgrades are not tested.)
-The tracker remains compatible with subprocesses that use new protocol
-(that is, subprocesses using Python 3.13.10, 3.14.1 and 3.15).
diff --git 
a/Misc/NEWS.d/next/Library/2025-12-05-17-58-29.gh-issue-140797.YxB27u.rst 
b/Misc/NEWS.d/next/Library/2025-12-05-17-58-29.gh-issue-140797.YxB27u.rst
deleted file mode 100644
index ebbe06fddfb372..00000000000000
--- a/Misc/NEWS.d/next/Library/2025-12-05-17-58-29.gh-issue-140797.YxB27u.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Revert changes to the undocumented :class:`!re.Scanner` class. Capturing
-groups are still allowed for backward compatibility, although using them can
-lead to incorrect result. They will be forbidden in future Python versions.
diff --git 
a/Misc/NEWS.d/next/Security/2024-05-23-11-44-41.gh-issue-119452.PRfsSv.rst 
b/Misc/NEWS.d/next/Security/2024-05-23-11-44-41.gh-issue-119452.PRfsSv.rst
deleted file mode 100644
index 98956627f2b30d..00000000000000
--- a/Misc/NEWS.d/next/Security/2024-05-23-11-44-41.gh-issue-119452.PRfsSv.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Fix a potential memory denial of service in the :mod:`http.server` module.
-When a malicious user is connected to the CGI server on Windows, it could cause
-an arbitrary amount of memory to be allocated.
-This could have led to symptoms including a :exc:`MemoryError`, swapping, out
-of memory (OOM) killed processes or containers, or even system crashes.
diff --git 
a/Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst 
b/Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst
deleted file mode 100644
index 440bc7794c69ef..00000000000000
--- a/Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst
+++ /dev/null
@@ -1 +0,0 @@
-Remove quadratic behavior in ``xml.minidom`` node ID cache clearing.
diff --git a/README.rst b/README.rst
index 242c9dc7b6a137..90e1ed6e07931d 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,4 @@
-This is Python version 3.14.1
+This is Python version 3.14.2
 =============================
 
 .. image:: 
https://github.com/python/cpython/actions/workflows/build.yml/badge.svg?branch=main&event=push

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to