SHA256
1
0
forked from pool/python312

Accepting request 1102750 from devel:languages:python:Factory

OBS-URL: https://build.opensuse.org/request/show/1102750
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python312?expand=0&rev=6
This commit is contained in:
Dominique Leuenberger 2023-08-08 13:54:45 +00:00 committed by Git OBS Bridge
commit 1ff7c3b41f
17 changed files with 305 additions and 445 deletions

View File

@ -29,10 +29,10 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
Lib/test/test_sysconfig.py | 17 +++++++++++--
3 files changed, 71 insertions(+), 4 deletions(-)
Index: Python-3.12.0b1/Lib/site.py
Index: Python-3.12.0rc1/Lib/site.py
===================================================================
--- Python-3.12.0b1.orig/Lib/site.py
+++ Python-3.12.0b1/Lib/site.py
--- Python-3.12.0rc1.orig/Lib/site.py
+++ Python-3.12.0rc1/Lib/site.py
@@ -377,8 +377,15 @@ def getsitepackages(prefixes=None):
return sitepackages
@ -50,10 +50,10 @@ Index: Python-3.12.0b1/Lib/site.py
for sitedir in getsitepackages(prefixes):
if os.path.isdir(sitedir):
addsitedir(sitedir, known_paths)
Index: Python-3.12.0b1/Lib/sysconfig.py
Index: Python-3.12.0rc1/Lib/sysconfig.py
===================================================================
--- Python-3.12.0b1.orig/Lib/sysconfig.py
+++ Python-3.12.0b1/Lib/sysconfig.py
--- Python-3.12.0rc1.orig/Lib/sysconfig.py
+++ Python-3.12.0rc1/Lib/sysconfig.py
@@ -104,6 +104,11 @@ if os.name == 'nt':
else:
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
@ -128,10 +128,10 @@ Index: Python-3.12.0b1/Lib/sysconfig.py
if os.name == 'nt':
# On Windows we want to substitute 'lib' for schemes rather
# than the native value (without modifying vars, in case it
Index: Python-3.12.0b1/Lib/test/test_sysconfig.py
Index: Python-3.12.0rc1/Lib/test/test_sysconfig.py
===================================================================
--- Python-3.12.0b1.orig/Lib/test/test_sysconfig.py
+++ Python-3.12.0b1/Lib/test/test_sysconfig.py
--- Python-3.12.0rc1.orig/Lib/test/test_sysconfig.py
+++ Python-3.12.0rc1/Lib/test/test_sysconfig.py
@@ -110,8 +110,19 @@ class TestSysConfig(unittest.TestCase):
for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]:

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f05710c36aee5850f5c2769be76b80bf212aec351438fdf8adc20c38c8361fac
size 20244176

View File

@ -1,18 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmStSfVfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
YwW0RQ//cCsYuhgw+RUslhcDQSNDc+Fuhb0estm7MRzH7VnkUwrrKMTTedWxGp8z
KrJmsH/PRL1c+AX9+1Hi9sr4enh9jgV1KQuqW7TfqS7w+qhlt9krdaDX7zdHqy2k
K0KLua5bv62MBPF5hPM6cP71WJcOsZZLw7r2Cx6USapq6hnSuew7XpSB9zqyehLs
bZOHIAlI1DK6sIdmO42fJr9AZWIO3Z5QhQLglMrHcn9LIp9P/gftVSLt2ZnPQ0qE
2f8d+XyEP0OG+oErbu+aZxHBroVSTEqp85lEVee/Sr0r8+dOJzgF/vVnpHKzu54M
csmRXVljhMm+Iy2rzIuSvI3YFqPL7PBUezRuGDeUDFwkapt+XsiO0eMddxX7W7U2
isinSriLFmAKxHiIy76E8ELkJ/uUxNdN3Hgqey9g5VbfpEYUGSBT6wGoG3FQ3jHq
gI0XqxSfTqVyM7XBlg2Uyf+3wv4Vhku/6xH3CTPEJYGqiR9ZobR1cv3MMAtRQodx
5kD0Rhb9MF0Q/LEIAF0W99mJaAhn+wpf0bwP4/U+3LXmH5RsKoe8eGnyAGiejVn7
RajZUhFRqsC2g+n9sjhXX+vNPcbl4OykTZat94Bfq5jBBRBlm0nx5Qf/bCFzmjzM
v3s2FWCQ8eM0sgPQkSYn3Zal9pEG+iDXtz7ODrsl998RlkknjrA=
=aiWo
-----END PGP SIGNATURE-----

3
Python-3.12.0rc1.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bd88d516b51474d7facae3ed7ab6a421efb17e583c21c8a749470f293e2575fc
size 20285264

View File

@ -0,0 +1,18 @@
-----BEGIN PGP SIGNATURE-----
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmTOQCpfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
YwX5DxAAjL+OpYDuAssAXPIdLU4VlzR+whI1kCquPHIgBn8u+xWqgzVMwEyd8x2i
OdvQj+206Hh2sspsrys+sBkyPqGzo/mjlRe18CQvHU8FrjPj8IsZgSU6/gpKcfZL
ZJzUeG6jy6jy2LygM2cmgDEhr8kl6fNQ5hAV/jkpuzLZe0M4oEsKQRCQVC5D8rSE
5NLV6ZUK8/MeFd6S3BXSsUrx1bgr0Pi2YDlfTAqB++BBWiQiLsclNpwvMHlcu1D4
z3QM3GXBkUQrh2QAtRKomJdqDILdakIuJg+aKD+ZuRZxzNcdFBVH9PBbSpfObSJ9
ohBkpVo+MpEDJNq64N9AjnH0xT/cpvGimmsoVZ+zMU26uDm4qyGoDfem2UNgHuaz
4m+QmDoIUSYbhegsMXzcPRyGFKFb6fOCyWBQbb2YB6oo2vPVYNNpHFsMx21Gi43K
54vk0eBYzVBChOsY+igEdFZMbwQ7PEkajGbgQ4FiXhGlA7otQp7mx/IxjVcT1SxA
A07fXAFYF2aZkLlw4V09EeDdkrcO00pCGtTGXhfFCO0KsfyAWm3k8xLGgLFVzDyl
afMTMo2W5kEeL2Ui8fkxWBBtvF8xrF67XT6vT+kaElk1yrG8dIixG0fEVsoDPpz2
edbb/Kd5MNyWzjMfJaW9otlH7KjPBPRuQzubgmBXXDBxij5C1UI=
=rhXA
-----END PGP SIGNATURE-----

View File

@ -1,299 +0,0 @@
From 4288c623d62cf90d8e4444facb3379fb06d01140 Mon Sep 17 00:00:00 2001
From: "Gregory P. Smith" <greg@krypto.org>
Date: Thu, 20 Jul 2023 20:30:52 -0700
Subject: [PATCH] [3.12] gh-106669: Revert "gh-102988: Detect email address
parsing errors ... (GH-105127)" (GH-106733)
This reverts commit 18dfbd035775c15533d13a98e56b1d2bf5c65f00.
Adds a regression test from the issue.
See https://github.com/python/cpython/issues/106669..
(cherry picked from commit a31dea1feb61793e48fa9aa5014f358352205c1d)
Co-authored-by: Gregory P. Smith <greg@krypto.org>
---
Doc/library/email.utils.rst | 26 --
Doc/whatsnew/3.12.rst | 8
Lib/email/utils.py | 63 ------
Lib/test/test_email/test_email.py | 96 +---------
Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst | 4
5 files changed, 30 insertions(+), 167 deletions(-)
create mode 100644 Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
Index: Python-3.12.0b4/Doc/library/email.utils.rst
===================================================================
--- Python-3.12.0b4.orig/Doc/library/email.utils.rst
+++ Python-3.12.0b4/Doc/library/email.utils.rst
@@ -65,11 +65,6 @@ of the new API.
*email address* parts. Returns a tuple of that information, unless the parse
fails, in which case a 2-tuple of ``('', '')`` is returned.
- .. versionchanged:: 3.12
- For security reasons, addresses that were ambiguous and could parse into
- multiple different addresses now cause ``('', '')`` to be returned
- instead of only one of the *potential* addresses.
-
.. function:: formataddr(pair, charset='utf-8')
@@ -92,7 +87,7 @@ of the new API.
This method returns a list of 2-tuples of the form returned by ``parseaddr()``.
*fieldvalues* is a sequence of header field values as might be returned by
:meth:`Message.get_all <email.message.Message.get_all>`. Here's a simple
- example that gets all the recipients of a message:
+ example that gets all the recipients of a message::
from email.utils import getaddresses
@@ -102,25 +97,6 @@ of the new API.
resent_ccs = msg.get_all('resent-cc', [])
all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)
- When parsing fails for a single fieldvalue, a 2-tuple of ``('', '')``
- is returned in its place. Other errors in parsing the list of
- addresses such as a fieldvalue seemingly parsing into multiple
- addresses may result in a list containing a single empty 2-tuple
- ``[('', '')]`` being returned rather than returning potentially
- invalid output.
-
- Example malformed input parsing:
-
- .. doctest::
-
- >>> from email.utils import getaddresses
- >>> getaddresses(['alice@example.com <bob@example.com>', 'me@example.com'])
- [('', '')]
-
- .. versionchanged:: 3.12
- The 2-tuple of ``('', '')`` in the returned values when parsing
- fails were added as to address a security issue.
-
.. function:: parsedate(date)
Index: Python-3.12.0b4/Doc/whatsnew/3.12.rst
===================================================================
--- Python-3.12.0b4.orig/Doc/whatsnew/3.12.rst
+++ Python-3.12.0b4/Doc/whatsnew/3.12.rst
@@ -570,14 +570,6 @@ dis
:data:`~dis.hasarg` collection instead.
(Contributed by Irit Katriel in :gh:`94216`.)
-email
------
-
-* :func:`email.utils.getaddresses` and :func:`email.utils.parseaddr` now return
- ``('', '')`` 2-tuples in more situations where invalid email addresses are
- encountered instead of potentially inaccurate values.
- (Contributed by Thomas Dwyer for :gh:`102988` to ameliorate CVE-2023-27043.)
-
fractions
---------
Index: Python-3.12.0b4/Lib/email/utils.py
===================================================================
--- Python-3.12.0b4.orig/Lib/email/utils.py
+++ Python-3.12.0b4/Lib/email/utils.py
@@ -106,54 +106,12 @@ def formataddr(pair, charset='utf-8'):
return address
-def _pre_parse_validation(email_header_fields):
- accepted_values = []
- for v in email_header_fields:
- s = v.replace('\\(', '').replace('\\)', '')
- if s.count('(') != s.count(')'):
- v = "('', '')"
- accepted_values.append(v)
-
- return accepted_values
-
-
-def _post_parse_validation(parsed_email_header_tuples):
- accepted_values = []
- # The parser would have parsed a correctly formatted domain-literal
- # The existence of an [ after parsing indicates a parsing failure
- for v in parsed_email_header_tuples:
- if '[' in v[1]:
- v = ('', '')
- accepted_values.append(v)
-
- return accepted_values
-
def getaddresses(fieldvalues):
- """Return a list of (REALNAME, EMAIL) or ('','') for each fieldvalue.
-
- When parsing fails for a fieldvalue, a 2-tuple of ('', '') is returned in
- its place.
-
- If the resulting list of parsed address is not the same as the number of
- fieldvalues in the input list a parsing error has occurred. A list
- containing a single empty 2-tuple [('', '')] is returned in its place.
- This is done to avoid invalid output.
- """
- fieldvalues = [str(v) for v in fieldvalues]
- fieldvalues = _pre_parse_validation(fieldvalues)
- all = COMMASPACE.join(v for v in fieldvalues)
+ """Return a list of (REALNAME, EMAIL) for each fieldvalue."""
+ all = COMMASPACE.join(str(v) for v in fieldvalues)
a = _AddressList(all)
- result = _post_parse_validation(a.addresslist)
-
- n = 0
- for v in fieldvalues:
- n += v.count(',') + 1
-
- if len(result) != n:
- return [('', '')]
-
- return result
+ return a.addresslist
def _format_timetuple_and_zone(timetuple, zone):
@@ -254,18 +212,9 @@ def parseaddr(addr):
Return a tuple of realname and email address, unless the parse fails, in
which case return a 2-tuple of ('', '').
"""
- if isinstance(addr, list):
- addr = addr[0]
-
- if not isinstance(addr, str):
- return ('', '')
-
- addr = _pre_parse_validation([addr])[0]
- addrs = _post_parse_validation(_AddressList(addr).addresslist)
-
- if not addrs or len(addrs) > 1:
- return ('', '')
-
+ addrs = _AddressList(addr).addresslist
+ if not addrs:
+ return '', ''
return addrs[0]
Index: Python-3.12.0b4/Lib/test/test_email/test_email.py
===================================================================
--- Python-3.12.0b4.orig/Lib/test/test_email/test_email.py
+++ Python-3.12.0b4/Lib/test/test_email/test_email.py
@@ -3319,90 +3319,32 @@ Foo
[('Al Person', 'aperson@dom.ain'),
('Bud Person', 'bperson@dom.ain')])
- def test_getaddresses_parsing_errors(self):
- """Test for parsing errors from CVE-2023-27043"""
- eq = self.assertEqual
- eq(utils.getaddresses(['alice@example.org(<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org)<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org<<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org><bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org@<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org,<bob@example.com>']),
- [('', 'alice@example.org'), ('', 'bob@example.com')])
- eq(utils.getaddresses(['alice@example.org;<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org:<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org.<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org"<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org[<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org]<bob@example.com>']),
- [('', '')])
-
- def test_parseaddr_parsing_errors(self):
- """Test for parsing errors from CVE-2023-27043"""
- eq = self.assertEqual
- eq(utils.parseaddr(['alice@example.org(<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org)<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org<<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org><bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org@<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org,<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org;<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org:<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org.<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org"<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org[<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org]<bob@example.com>']),
- ('', ''))
+ def test_getaddresses_comma_in_name(self):
+ """GH-106669 regression test."""
+ self.assertEqual(
+ utils.getaddresses(
+ [
+ '"Bud, Person" <bperson@dom.ain>',
+ 'aperson@dom.ain (Al Person)',
+ '"Mariusz Felisiak" <to@example.com>',
+ ]
+ ),
+ [
+ ('Bud, Person', 'bperson@dom.ain'),
+ ('Al Person', 'aperson@dom.ain'),
+ ('Mariusz Felisiak', 'to@example.com'),
+ ],
+ )
def test_getaddresses_nasty(self):
eq = self.assertEqual
eq(utils.getaddresses(['foo: ;']), [('', '')])
- eq(utils.getaddresses(['[]*-- =~$']), [('', '')])
+ eq(utils.getaddresses(
+ ['[]*-- =~$']),
+ [('', ''), ('', ''), ('', '*--')])
eq(utils.getaddresses(
['foo: ;', '"Jason R. Mastaler" <jason@dom.ain>']),
[('', ''), ('Jason R. Mastaler', 'jason@dom.ain')])
- eq(utils.getaddresses(
- [r'Pete(A nice \) chap) <pete(his account)@silly.test(his host)>']),
- [('Pete (A nice ) chap his account his host)', 'pete@silly.test')])
- eq(utils.getaddresses(
- ['(Empty list)(start)Undisclosed recipients :(nobody(I know))']),
- [('', '')])
- eq(utils.getaddresses(
- ['Mary <@machine.tld:mary@example.net>, , jdoe@test . example']),
- [('Mary', 'mary@example.net'), ('', ''), ('', 'jdoe@test.example')])
- eq(utils.getaddresses(
- ['John Doe <jdoe@machine(comment). example>']),
- [('John Doe (comment)', 'jdoe@machine.example')])
- eq(utils.getaddresses(
- ['"Mary Smith: Personal Account" <smith@home.example>']),
- [('Mary Smith: Personal Account', 'smith@home.example')])
- eq(utils.getaddresses(
- ['Undisclosed recipients:;']),
- [('', '')])
- eq(utils.getaddresses(
- [r'<boss@nil.test>, "Giant; \"Big\" Box" <bob@example.net>']),
- [('', 'boss@nil.test'), ('Giant; "Big" Box', 'bob@example.net')])
def test_getaddresses_embedded_comment(self):
"""Test proper handling of a nested comment"""
Index: Python-3.12.0b4/Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
===================================================================
--- /dev/null
+++ Python-3.12.0b4/Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
@@ -0,0 +1,4 @@
+Reverted the :mod:`email.utils` security improvement change released in
+3.12beta4 that unintentionally caused :mod:`email.utils.getaddresses` to fail
+to parse email addresses with a comma in the quoted name field.
+See :gh:`106669`.

View File

@ -13,10 +13,10 @@ Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
5 files changed, 34 insertions(+), 9 deletions(-)
create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
Index: Python-3.12.0b1/Doc/library/ensurepip.rst
Index: Python-3.12.0rc1/Doc/library/ensurepip.rst
===================================================================
--- Python-3.12.0b1.orig/Doc/library/ensurepip.rst
+++ Python-3.12.0b1/Doc/library/ensurepip.rst
--- Python-3.12.0rc1.orig/Doc/library/ensurepip.rst
+++ Python-3.12.0rc1/Doc/library/ensurepip.rst
@@ -59,8 +59,9 @@ is at least as recent as the one availab
By default, ``pip`` is installed into the current virtual environment
(if one is active) or into the system site packages (if there is no
@ -55,10 +55,10 @@ Index: Python-3.12.0b1/Doc/library/ensurepip.rst
.. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
.. note::
Index: Python-3.12.0b1/Lib/ensurepip/__init__.py
Index: Python-3.12.0rc1/Lib/ensurepip/__init__.py
===================================================================
--- Python-3.12.0b1.orig/Lib/ensurepip/__init__.py
+++ Python-3.12.0b1/Lib/ensurepip/__init__.py
--- Python-3.12.0rc1.orig/Lib/ensurepip/__init__.py
+++ Python-3.12.0rc1/Lib/ensurepip/__init__.py
@@ -120,27 +120,27 @@ def _disable_pip_configuration_settings(
os.environ['PIP_CONFIG_FILE'] = os.devnull
@ -121,10 +121,10 @@ Index: Python-3.12.0b1/Lib/ensurepip/__init__.py
upgrade=args.upgrade,
user=args.user,
verbosity=args.verbosity,
Index: Python-3.12.0b1/Lib/test/test_ensurepip.py
Index: Python-3.12.0rc1/Lib/test/test_ensurepip.py
===================================================================
--- Python-3.12.0b1.orig/Lib/test/test_ensurepip.py
+++ Python-3.12.0b1/Lib/test/test_ensurepip.py
--- Python-3.12.0rc1.orig/Lib/test/test_ensurepip.py
+++ Python-3.12.0rc1/Lib/test/test_ensurepip.py
@@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit
unittest.mock.ANY,
)
@ -143,11 +143,11 @@ Index: Python-3.12.0b1/Lib/test/test_ensurepip.py
def test_bootstrapping_with_user(self):
ensurepip.bootstrap(user=True)
Index: Python-3.12.0b1/Makefile.pre.in
Index: Python-3.12.0rc1/Makefile.pre.in
===================================================================
--- Python-3.12.0b1.orig/Makefile.pre.in
+++ Python-3.12.0b1/Makefile.pre.in
@@ -1908,7 +1908,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
--- Python-3.12.0rc1.orig/Makefile.pre.in
+++ Python-3.12.0rc1/Makefile.pre.in
@@ -1909,7 +1909,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
install|*) ensurepip="" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@ -156,7 +156,7 @@ Index: Python-3.12.0b1/Makefile.pre.in
fi
.PHONY: altinstall
@@ -1919,7 +1919,7 @@ altinstall: commoninstall
@@ -1920,7 +1920,7 @@ altinstall: commoninstall
install|*) ensurepip="--altinstall" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@ -165,9 +165,9 @@ Index: Python-3.12.0b1/Makefile.pre.in
fi
.PHONY: commoninstall
Index: Python-3.12.0b1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
Index: Python-3.12.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
===================================================================
--- /dev/null
+++ Python-3.12.0b1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
+++ Python-3.12.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
@@ -0,0 +1 @@
+A directory prefix can now be specified when using :mod:`ensurepip`.

12
externally_managed.in Normal file
View File

@ -0,0 +1,12 @@
[externally-managed]
Error=To install Python packages system-wide, try
zypper install __PYTHONPREFIX__-xyz, where xyz is the package
you are trying to install.
If you wish to install a non-rpm packaged Python package,
create a virtual environment using __PYTHON__ -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip.
If you wish to install a non-rpm packaged Python application,
it may be easiest to use `pipx install xyz`, which will manage a
virtual environment for you. Install pipx via `zypper install __PYTHONPREFIX__-pipx` .

View File

@ -3,8 +3,10 @@
Misc/NEWS | 2 +-
2 files changed, 1 insertion(+), 3 deletions(-)
--- a/Doc/using/configure.rst
+++ b/Doc/using/configure.rst
Index: Python-3.12.0rc1/Doc/using/configure.rst
===================================================================
--- Python-3.12.0rc1.orig/Doc/using/configure.rst
+++ Python-3.12.0rc1/Doc/using/configure.rst
@@ -599,13 +599,11 @@ macOS Options
See ``Mac/README.rst``.
@ -19,9 +21,11 @@
.. cmdoption:: --enable-framework=INSTALLDIR
Create a Python.framework rather than a traditional Unix install. Optional
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -11318,7 +11318,7 @@ C API
Index: Python-3.12.0rc1/Misc/NEWS
===================================================================
--- Python-3.12.0rc1.orig/Misc/NEWS
+++ Python-3.12.0rc1/Misc/NEWS
@@ -11530,7 +11530,7 @@ C API
- bpo-40939: Removed documentation for the removed ``PyParser_*`` C API.
- bpo-43795: The list in :ref:`limited-api-list` now shows the public name

View File

@ -4,9 +4,11 @@ unchanged:
Doc/library/turtle.rst | 81 -------------------------------------------------
1 file changed, 81 deletions(-)
--- a/Doc/library/turtle.rst
+++ b/Doc/library/turtle.rst
@@ -251,7 +251,6 @@ Turtle motion
Index: Python-3.12.0rc1/Doc/library/turtle.rst
===================================================================
--- Python-3.12.0rc1.orig/Doc/library/turtle.rst
+++ Python-3.12.0rc1/Doc/library/turtle.rst
@@ -441,7 +441,6 @@ Turtle motion
turtle is headed.
.. doctest::
@ -14,7 +16,7 @@ unchanged:
>>> turtle.position()
(0.00,0.00)
@@ -278,7 +277,6 @@ Turtle motion
@@ -468,7 +467,6 @@ Turtle motion
>>> turtle.goto(0, 0)
.. doctest::
@ -22,7 +24,7 @@ unchanged:
>>> turtle.position()
(0.00,0.00)
@@ -297,13 +295,11 @@ Turtle motion
@@ -487,13 +485,11 @@ Turtle motion
orientation depends on the turtle mode, see :func:`mode`.
.. doctest::
@ -36,7 +38,7 @@ unchanged:
>>> turtle.heading()
22.0
@@ -322,13 +318,11 @@ Turtle motion
@@ -512,13 +508,11 @@ Turtle motion
orientation depends on the turtle mode, see :func:`mode`.
.. doctest::
@ -50,7 +52,7 @@ unchanged:
>>> turtle.heading()
22.0
@@ -351,13 +345,11 @@ Turtle motion
@@ -541,13 +535,11 @@ Turtle motion
not change the turtle's orientation.
.. doctest::
@ -64,7 +66,7 @@ unchanged:
>>> tp = turtle.pos()
>>> tp
@@ -419,13 +411,11 @@ Turtle motion
@@ -609,13 +601,11 @@ Turtle motion
unchanged.
.. doctest::
@ -78,7 +80,7 @@ unchanged:
>>> turtle.position()
(0.00,240.00)
@@ -441,13 +431,11 @@ Turtle motion
@@ -631,13 +621,11 @@ Turtle motion
Set the turtle's second coordinate to *y*, leave first coordinate unchanged.
.. doctest::
@ -92,7 +94,7 @@ unchanged:
>>> turtle.position()
(0.00,40.00)
@@ -474,7 +462,6 @@ Turtle motion
@@ -664,7 +652,6 @@ Turtle motion
=================== ====================
.. doctest::
@ -100,7 +102,7 @@ unchanged:
>>> turtle.setheading(90)
>>> turtle.heading()
@@ -487,14 +474,12 @@ Turtle motion
@@ -677,14 +664,12 @@ Turtle motion
its start-orientation (which depends on the mode, see :func:`mode`).
.. doctest::
@ -115,7 +117,7 @@ unchanged:
>>> turtle.heading()
90.0
@@ -526,7 +511,6 @@ Turtle motion
@@ -716,7 +701,6 @@ Turtle motion
calculated automatically. May be used to draw regular polygons.
.. doctest::
@ -123,7 +125,7 @@ unchanged:
>>> turtle.home()
>>> turtle.position()
@@ -555,7 +539,6 @@ Turtle motion
@@ -745,7 +729,6 @@ Turtle motion
.. doctest::
@ -131,7 +133,7 @@ unchanged:
>>> turtle.home()
>>> turtle.dot()
@@ -573,7 +556,6 @@ Turtle motion
@@ -763,7 +746,6 @@ Turtle motion
it by calling ``clearstamp(stamp_id)``.
.. doctest::
@ -139,7 +141,7 @@ unchanged:
>>> turtle.color("blue")
>>> stamp_id = turtle.stamp()
@@ -588,7 +570,6 @@ Turtle motion
@@ -778,7 +760,6 @@ Turtle motion
Delete stamp with given *stampid*.
.. doctest::
@ -147,7 +149,7 @@ unchanged:
>>> turtle.position()
(150.00,-0.00)
@@ -626,7 +607,6 @@ Turtle motion
@@ -816,7 +797,6 @@ Turtle motion
undo actions is determined by the size of the undobuffer.
.. doctest::
@ -155,7 +157,7 @@ unchanged:
>>> for i in range(4):
... turtle.fd(50); turtle.lt(80)
@@ -659,7 +639,6 @@ Turtle motion
@@ -849,7 +829,6 @@ Turtle motion
turtle turn instantly.
.. doctest::
@ -163,7 +165,7 @@ unchanged:
>>> turtle.speed()
3
@@ -680,7 +659,6 @@ Tell Turtle's state
@@ -870,7 +849,6 @@ Tell Turtle's state
Return the turtle's current location (x,y) (as a :class:`Vec2D` vector).
.. doctest::
@ -171,7 +173,7 @@ unchanged:
>>> turtle.pos()
(440.00,-0.00)
@@ -696,7 +674,6 @@ Tell Turtle's state
@@ -886,7 +864,6 @@ Tell Turtle's state
orientation which depends on the mode - "standard"/"world" or "logo".
.. doctest::
@ -179,7 +181,7 @@ unchanged:
>>> turtle.goto(10, 10)
>>> turtle.towards(0,0)
@@ -708,7 +685,6 @@ Tell Turtle's state
@@ -898,7 +875,6 @@ Tell Turtle's state
Return the turtle's x coordinate.
.. doctest::
@ -187,7 +189,7 @@ unchanged:
>>> turtle.home()
>>> turtle.left(50)
@@ -724,7 +700,6 @@ Tell Turtle's state
@@ -914,7 +890,6 @@ Tell Turtle's state
Return the turtle's y coordinate.
.. doctest::
@ -195,7 +197,7 @@ unchanged:
>>> turtle.home()
>>> turtle.left(60)
@@ -741,7 +716,6 @@ Tell Turtle's state
@@ -931,7 +906,6 @@ Tell Turtle's state
:func:`mode`).
.. doctest::
@ -203,7 +205,7 @@ unchanged:
>>> turtle.home()
>>> turtle.left(67)
@@ -758,7 +732,6 @@ Tell Turtle's state
@@ -948,7 +922,6 @@ Tell Turtle's state
other turtle, in turtle step units.
.. doctest::
@ -211,7 +213,7 @@ unchanged:
>>> turtle.home()
>>> turtle.distance(30,40)
@@ -782,7 +755,6 @@ Settings for measurement
@@ -972,7 +945,6 @@ Settings for measurement
Default value is 360 degrees.
.. doctest::
@ -219,7 +221,7 @@ unchanged:
>>> turtle.home()
>>> turtle.left(90)
@@ -805,7 +777,6 @@ Settings for measurement
@@ -995,7 +967,6 @@ Settings for measurement
``degrees(2*math.pi)``.
.. doctest::
@ -227,7 +229,7 @@ unchanged:
>>> turtle.home()
>>> turtle.left(90)
@@ -816,7 +787,6 @@ Settings for measurement
@@ -1006,7 +977,6 @@ Settings for measurement
1.5707963267948966
.. doctest::
@ -235,7 +237,7 @@ unchanged:
:hide:
>>> turtle.degrees(360)
@@ -852,7 +822,6 @@ Drawing state
@@ -1042,7 +1012,6 @@ Drawing state
thickness. If no argument is given, the current pensize is returned.
.. doctest::
@ -243,7 +245,7 @@ unchanged:
>>> turtle.pensize()
1
@@ -884,7 +853,6 @@ Drawing state
@@ -1074,7 +1043,6 @@ Drawing state
attributes in one statement.
.. doctest::
@ -251,7 +253,7 @@ unchanged:
:options: +NORMALIZE_WHITESPACE
>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
@@ -907,7 +875,6 @@ Drawing state
@@ -1097,7 +1065,6 @@ Drawing state
Return ``True`` if pen is down, ``False`` if it's up.
.. doctest::
@ -259,7 +261,7 @@ unchanged:
>>> turtle.penup()
>>> turtle.isdown()
@@ -948,7 +915,6 @@ Color control
@@ -1138,7 +1105,6 @@ Color control
newly set pencolor.
.. doctest::
@ -267,7 +269,7 @@ unchanged:
>>> colormode()
1.0
@@ -997,7 +963,6 @@ Color control
@@ -1187,7 +1153,6 @@ Color control
with the newly set fillcolor.
.. doctest::
@ -275,7 +277,7 @@ unchanged:
>>> turtle.fillcolor("violet")
>>> turtle.fillcolor()
@@ -1036,7 +1001,6 @@ Color control
@@ -1226,7 +1191,6 @@ Color control
with the newly set colors.
.. doctest::
@ -283,7 +285,7 @@ unchanged:
>>> turtle.color("red", "green")
>>> turtle.color()
@@ -1053,7 +1017,6 @@ Filling
@@ -1243,7 +1207,6 @@ Filling
~~~~~~~
.. doctest::
@ -291,7 +293,7 @@ unchanged:
:hide:
>>> turtle.home()
@@ -1063,7 +1026,6 @@ Filling
@@ -1253,7 +1216,6 @@ Filling
Return fillstate (``True`` if filling, ``False`` else).
.. doctest::
@ -299,7 +301,7 @@ unchanged:
>>> turtle.begin_fill()
>>> if turtle.filling():
@@ -1088,7 +1050,6 @@ Filling
@@ -1278,7 +1240,6 @@ Filling
above may be either all yellow or have some white regions.
.. doctest::
@ -307,7 +309,7 @@ unchanged:
>>> turtle.color("black", "red")
>>> turtle.begin_fill()
@@ -1105,7 +1066,6 @@ More drawing control
@@ -1295,7 +1256,6 @@ More drawing control
variables to the default values.
.. doctest::
@ -315,7 +317,7 @@ unchanged:
>>> turtle.goto(0,-22)
>>> turtle.left(100)
@@ -1156,7 +1116,6 @@ Visibility
@@ -1346,7 +1306,6 @@ Visibility
drawing observably.
.. doctest::
@ -323,7 +325,7 @@ unchanged:
>>> turtle.hideturtle()
@@ -1167,7 +1126,6 @@ Visibility
@@ -1357,7 +1316,6 @@ Visibility
Make the turtle visible.
.. doctest::
@ -331,7 +333,7 @@ unchanged:
>>> turtle.showturtle()
@@ -1198,7 +1156,6 @@ Appearance
@@ -1388,7 +1346,6 @@ Appearance
deal with shapes see Screen method :func:`register_shape`.
.. doctest::
@ -339,7 +341,7 @@ unchanged:
>>> turtle.shape()
'classic'
@@ -1224,7 +1181,6 @@ Appearance
@@ -1414,7 +1371,6 @@ Appearance
``resizemode("user")`` is called by :func:`shapesize` when used with arguments.
.. doctest::
@ -347,7 +349,7 @@ unchanged:
>>> turtle.resizemode()
'noresize'
@@ -1248,7 +1204,6 @@ Appearance
@@ -1438,7 +1394,6 @@ Appearance
of the shape's outline.
.. doctest::
@ -355,7 +357,7 @@ unchanged:
>>> turtle.shapesize()
(1.0, 1.0, 1)
@@ -1273,7 +1228,6 @@ Appearance
@@ -1463,7 +1418,6 @@ Appearance
heading of the turtle are sheared.
.. doctest::
@ -363,7 +365,7 @@ unchanged:
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
@@ -1290,7 +1244,6 @@ Appearance
@@ -1480,7 +1434,6 @@ Appearance
change the turtle's heading (direction of movement).
.. doctest::
@ -371,7 +373,7 @@ unchanged:
>>> turtle.reset()
>>> turtle.shape("circle")
@@ -1336,7 +1289,6 @@ Appearance
@@ -1526,7 +1479,6 @@ Appearance
turtle (its direction of movement).
.. doctest::
@ -379,7 +381,7 @@ unchanged:
>>> turtle.reset()
>>> turtle.shape("circle")
@@ -1365,7 +1317,6 @@ Appearance
@@ -1555,7 +1507,6 @@ Appearance
given matrix.
.. doctest::
@ -387,7 +389,7 @@ unchanged:
>>> turtle = Turtle()
>>> turtle.shape("square")
@@ -1381,7 +1332,6 @@ Appearance
@@ -1571,7 +1522,6 @@ Appearance
can be used to define a new shape or components of a compound shape.
.. doctest::
@ -395,7 +397,7 @@ unchanged:
>>> turtle.shape("square")
>>> turtle.shapetransform(4, -1, 0, 2)
@@ -1406,7 +1356,6 @@ Using events
@@ -1596,7 +1546,6 @@ Using events
procedural way:
.. doctest::
@ -403,7 +405,7 @@ unchanged:
>>> def turn(x, y):
... left(180)
@@ -1427,7 +1376,6 @@ Using events
@@ -1617,7 +1566,6 @@ Using events
``None``, existing bindings are removed.
.. doctest::
@ -411,7 +413,7 @@ unchanged:
>>> class MyTurtle(Turtle):
... def glow(self,x,y):
@@ -1455,7 +1403,6 @@ Using events
@@ -1645,7 +1593,6 @@ Using events
mouse-click event on that turtle.
.. doctest::
@ -419,7 +421,7 @@ unchanged:
>>> turtle.ondrag(turtle.goto)
@@ -1483,7 +1430,6 @@ Special Turtle methods
@@ -1673,7 +1620,6 @@ Special Turtle methods
Return the last recorded polygon.
.. doctest::
@ -427,7 +429,7 @@ unchanged:
>>> turtle.home()
>>> turtle.begin_poly()
@@ -1503,7 +1449,6 @@ Special Turtle methods
@@ -1693,7 +1639,6 @@ Special Turtle methods
turtle properties.
.. doctest::
@ -435,7 +437,7 @@ unchanged:
>>> mick = Turtle()
>>> joe = mick.clone()
@@ -1516,7 +1461,6 @@ Special Turtle methods
@@ -1706,7 +1651,6 @@ Special Turtle methods
return the "anonymous turtle":
.. doctest::
@ -443,7 +445,7 @@ unchanged:
>>> pet = getturtle()
>>> pet.fd(50)
@@ -1530,7 +1474,6 @@ Special Turtle methods
@@ -1720,7 +1664,6 @@ Special Turtle methods
TurtleScreen methods can then be called for that object.
.. doctest::
@ -451,7 +453,7 @@ unchanged:
>>> ts = turtle.getscreen()
>>> ts
@@ -1548,7 +1491,6 @@ Special Turtle methods
@@ -1738,7 +1681,6 @@ Special Turtle methods
``None``, the undobuffer is disabled.
.. doctest::
@ -459,7 +461,7 @@ unchanged:
>>> turtle.setundobuffer(42)
@@ -1558,7 +1500,6 @@ Special Turtle methods
@@ -1748,7 +1690,6 @@ Special Turtle methods
Return number of entries in the undobuffer.
.. doctest::
@ -467,7 +469,7 @@ unchanged:
>>> while undobufferentries():
... undo()
@@ -1581,7 +1522,6 @@ below:
@@ -1771,7 +1712,6 @@ below:
For example:
.. doctest::
@ -475,7 +477,7 @@ unchanged:
>>> s = Shape("compound")
>>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
@@ -1592,7 +1532,6 @@ below:
@@ -1782,7 +1722,6 @@ below:
3. Now add the Shape to the Screen's shapelist and use it:
.. doctest::
@ -483,7 +485,7 @@ unchanged:
>>> register_shape("myshape", s)
>>> shape("myshape")
@@ -1612,7 +1551,6 @@ Most of the examples in this section ref
@@ -1802,7 +1741,6 @@ Most of the examples in this section ref
``screen``.
.. doctest::
@ -491,7 +493,7 @@ unchanged:
:hide:
>>> screen = Screen()
@@ -1629,7 +1567,6 @@ Window control
@@ -1819,7 +1757,6 @@ Window control
Set or return background color of the TurtleScreen.
.. doctest::
@ -499,7 +501,7 @@ unchanged:
>>> screen.bgcolor("orange")
>>> screen.bgcolor()
@@ -1721,7 +1658,6 @@ Window control
@@ -1911,7 +1848,6 @@ Window control
distorted.
.. doctest::
@ -507,7 +509,7 @@ unchanged:
>>> screen.reset()
>>> screen.setworldcoordinates(-50,-7.5,50,7.5)
@@ -1732,7 +1668,6 @@ Window control
@@ -1922,7 +1858,6 @@ Window control
... left(45); fd(2) # a regular octagon
.. doctest::
@ -515,7 +517,7 @@ unchanged:
:hide:
>>> screen.reset()
@@ -1754,7 +1689,6 @@ Animation control
@@ -1944,7 +1879,6 @@ Animation control
Optional argument:
.. doctest::
@ -523,7 +525,7 @@ unchanged:
>>> screen.delay()
10
@@ -1776,7 +1710,6 @@ Animation control
@@ -1966,7 +1900,6 @@ Animation control
:func:`delay`).
.. doctest::
@ -531,7 +533,7 @@ unchanged:
>>> screen.tracer(8, 25)
>>> dist = 2
@@ -1813,7 +1746,6 @@ Using screen events
@@ -2003,7 +1936,6 @@ Using screen events
must have the focus. (See method :func:`listen`.)
.. doctest::
@ -539,7 +541,7 @@ unchanged:
>>> def f():
... fd(50)
@@ -1834,7 +1766,6 @@ Using screen events
@@ -2024,7 +1956,6 @@ Using screen events
must have focus. (See method :func:`listen`.)
.. doctest::
@ -547,7 +549,7 @@ unchanged:
>>> def f():
... fd(50)
@@ -1859,7 +1790,6 @@ Using screen events
@@ -2049,7 +1980,6 @@ Using screen events
named ``turtle``:
.. doctest::
@ -555,7 +557,7 @@ unchanged:
>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
>>> # make the turtle move to the clicked point.
@@ -1879,7 +1809,6 @@ Using screen events
@@ -2069,7 +1999,6 @@ Using screen events
Install a timer that calls *fun* after *t* milliseconds.
.. doctest::
@ -563,7 +565,7 @@ unchanged:
>>> running = True
>>> def f():
@@ -1961,7 +1890,6 @@ Settings and special methods
@@ -2151,7 +2080,6 @@ Settings and special methods
============ ========================= ===================
.. doctest::
@ -571,7 +573,7 @@ unchanged:
>>> mode("logo") # resets turtle heading to north
>>> mode()
@@ -1976,7 +1904,6 @@ Settings and special methods
@@ -2166,7 +2094,6 @@ Settings and special methods
values of color triples have to be in the range 0..*cmode*.
.. doctest::
@ -579,7 +581,7 @@ unchanged:
>>> screen.colormode(1)
>>> turtle.pencolor(240, 160, 80)
@@ -1997,7 +1924,6 @@ Settings and special methods
@@ -2187,7 +2114,6 @@ Settings and special methods
do with a Tkinter Canvas.
.. doctest::
@ -587,7 +589,7 @@ unchanged:
>>> cv = screen.getcanvas()
>>> cv
@@ -2009,7 +1935,6 @@ Settings and special methods
@@ -2199,7 +2125,6 @@ Settings and special methods
Return a list of names of all currently available turtle shapes.
.. doctest::
@ -595,7 +597,7 @@ unchanged:
>>> screen.getshapes()
['arrow', 'blank', 'circle', ..., 'turtle']
@@ -2033,7 +1958,6 @@ Settings and special methods
@@ -2223,7 +2148,6 @@ Settings and special methods
coordinates: Install the corresponding polygon shape.
.. doctest::
@ -603,7 +605,7 @@ unchanged:
>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
@@ -2049,7 +1973,6 @@ Settings and special methods
@@ -2239,7 +2163,6 @@ Settings and special methods
Return the list of turtles on the screen.
.. doctest::
@ -611,7 +613,7 @@ unchanged:
>>> for turtle in screen.turtles():
... turtle.color("red")
@@ -2111,7 +2034,6 @@ Methods specific to Screen, not inherite
@@ -2301,7 +2224,6 @@ Methods specific to Screen, not inherite
center window vertically
.. doctest::
@ -619,7 +621,7 @@ unchanged:
>>> screen.setup (width=200, height=200, startx=0, starty=0)
>>> # sets window to 200x200 pixels, in upper left of screen
@@ -2127,7 +2049,6 @@ Methods specific to Screen, not inherite
@@ -2317,7 +2239,6 @@ Methods specific to Screen, not inherite
Set title of turtle window to *titlestring*.
.. doctest::
@ -627,7 +629,7 @@ unchanged:
>>> screen.title("Welcome to the turtle zoo!")
@@ -2198,7 +2119,6 @@ Public classes
@@ -2388,7 +2309,6 @@ Public classes
Example:
.. doctest::
@ -635,7 +637,7 @@ unchanged:
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
>>> s = Shape("compound")
@@ -2549,7 +2469,6 @@ Changes since Python 3.0
@@ -2774,7 +2694,6 @@ Changes since Python 3.0
.. doctest::

View File

@ -2,10 +2,10 @@
Makefile.pre.in | 7 +++++++
1 file changed, 7 insertions(+)
Index: Python-3.12.0b1/Makefile.pre.in
Index: Python-3.12.0rc1/Makefile.pre.in
===================================================================
--- Python-3.12.0b1.orig/Makefile.pre.in
+++ Python-3.12.0b1/Makefile.pre.in
--- Python-3.12.0rc1.orig/Makefile.pre.in
+++ Python-3.12.0rc1/Makefile.pre.in
@@ -1332,11 +1332,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
$(DTRACE_OBJS) \
$(srcdir)/Modules/getbuildinfo.c

View File

@ -1,7 +1,7 @@
Index: Python-3.12.0b1/Lib/site.py
Index: Python-3.12.0rc1/Lib/site.py
===================================================================
--- Python-3.12.0b1.orig/Lib/site.py
+++ Python-3.12.0b1/Lib/site.py
--- Python-3.12.0rc1.orig/Lib/site.py
+++ Python-3.12.0rc1/Lib/site.py
@@ -76,7 +76,7 @@ import _sitebuiltins
import io

View File

@ -2,10 +2,10 @@
Lib/test/test_posix.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: Python-3.12.0b1/Lib/test/test_posix.py
Index: Python-3.12.0rc1/Lib/test/test_posix.py
===================================================================
--- Python-3.12.0b1.orig/Lib/test/test_posix.py
+++ Python-3.12.0b1/Lib/test/test_posix.py
--- Python-3.12.0rc1.orig/Lib/test/test_posix.py
+++ Python-3.12.0rc1/Lib/test/test_posix.py
@@ -431,7 +431,7 @@ class PosixTester(unittest.TestCase):
def test_posix_fadvise(self):
fd = os.open(os_helper.TESTFN, os.O_RDONLY)

View File

@ -1,3 +1,138 @@
-------------------------------------------------------------------
Mon Aug 7 07:31:27 UTC 2023 - Daniel Garcia <daniel.garcia@suse.com>
- Refresh all patches
- Drop Revert-gh105127-left-tests.patch, in upstream now
- Update to 3.12.0rc1:
- Reverted the :mod:`email.utils` security improvement change
released in 3.12beta4 that unintentionally caused
:mod:`email.utils.getaddresses` to fail to parse email addresses
with a comma in the quoted name field. See :gh:`106669`.
- Start initializing ob_digit during creation of
:c:type:`PyLongObject` objects. Patch by Illia Volochii.
- Increase C recursion limit for functions other than the main
interpreter from 800 to 1500. This should allow functions like
list.__repr__ and json.dumps to handle all the inputs that they
could prior to 3.12
- Fix potential unaligned memory access on C APIs involving returned
sequences of char * pointers within the :mod:`grp` and
:mod:`socket` modules. These were revealed using a
-fsaniziter=alignment build on ARM macOS. Patch by Christopher
Chavez.
- Add the exception as the third argument to PY_UNIND callbacks in
sys.monitoring. This makes the PY_UNWIND callback consistent with
the other exception hanlding callbacks.
- Raise a ValueError when a monitoring callback funtion returns
DISABLE for events that cannot be disabled locally.
- Add a RERAISE event to sys.monitoring, which occurs when an
exception is reraised, either explicitly by a plain raise
statement, or implicitly in an except or finally block.
- Unsupported modules now always fail to be imported.
- Fix classmethod-style :func:`super` method calls (i.e., where the
second argument to :func:`super`, or the implied second argument
drawn from self/cls in the case of zero-arg super, is a type) when
the target of the call is not a classmethod.
- Python no longer crashes due an infrequent race when initialzing
per-interpreter interned strings. The crash would manifest when
the interpreter was finalized.
- Python no longer crashes due to an infrequent race in setting
Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
(both deprecated), when simultaneously initializing two isolated
subinterpreters. Now they are only set during runtime
initialization.
- Fix a segmentation fault caused by a use-after-free bug in
frame_dealloc when the trashcan delays the deallocation of a
PyFrameObject.
- No longer suppress arbitrary errors in the __annotations__ getter
and setter in the type and module types.
- Propagate frozen_modules to multiprocessing spawned process
interpreters.
- Prevent out-of-bounds memory access during mmap.find() calls.
- Seems that in some conditions, OpenSSL will return
SSL_ERROR_SYSCALL instead of SSL_ERROR_SSL when a certification
verification has failed, but the error parameters will still
contain ERR_LIB_SSL and SSL_R_CERTIFICATE_VERIFY_FAILED. We are
now detecting this situation and raising the appropiate
ssl.SSLCertVerificationError. Patch by Pablo Galindo
- Fix :func:`types.get_original_bases` to only return
:attr:`!__orig_bases__` if it is present on cls directly. Patch by
James Hilton-Balfe.
- Prevent memory leak and use-after-free when using pointers to
pointers with ctypes
- Make :func:`gettext.pgettext` search plural definitions when
translation is not found.
- Document behavior of :func:`shutil.disk_usage` for non-mounted
filesystems on Unix.
- Do not report MultipartInvariantViolationDefect defect when the
:class:`email.parser.Parser` class is used to parse emails with
headersonly=True.
- Fix invalid result from :meth:`PurePath.relative_to` method when
attempting to walk a ".." segment in other with walk_up enabled. A
:exc:`ValueError` exception is now raised in this case.
- Fix potential missing NULL check of d2i_SSL_SESSION result in
_ssl.c.
- Update the bundled copy of pip to version 23.2.1.
- Fixed several bugs in zipfile.Path, including: in Path.match`,
Windows separators are no longer honored (and never were meant to
be); Fixed ``name/suffix/suffixes/stem operations when no filename
is present and the Path is not at the root of the zipfile;
Reworked glob for performance and more correct matching behavior.
- Add __copy__ and __deepcopy__ in :mod:`enum`
- Revert a change to :func:`colorsys.rgb_to_hls` that caused
division by zero for certain almost-white inputs. Patch by Terry
Jan Reedy.
- Instances of :class:`typing.TypeVar`, :class:`typing.ParamSpec`,
:class:`typing.ParamSpecArgs`, :class:`typing.ParamSpecKwargs`,
and :class:`typing.TypeVarTuple` once again support weak
references, fixing a regression introduced in Python 3.12.0 beta
1. Patch by Jelle Zijlstra.
- Detect possible memory allocation failure in the libtommath
function :c:func:`mp_init` used by the _tkinter module.
- Fix crash when calling repr with a manually constructed SignalDict
object. Patch by Charlie Zhao.
- Change the default return value of
:meth:`http.client.HTTPConnection.get_proxy_response_headers` to
be None and not {}.
- Ensure gettext(msg) retrieve translations even if a plural form
exists. In other words: gettext(msg) == ngettext(msg, '', 1).
- Add documentation for :c:type:`PyInterpreterConfig` and
:c:func:`Py_NewInterpreterFromConfig`. Also clarify some of the
nearby docs relative to per-interpreter GIL.
- Document the :mod:`curses` module variables :const:`~curses.LINES`
and :const:`~curses.COLS`.
- Add a number of standard external names to nitpick_ignore.
- Add documentation on how to localize the :mod:`argparse` module.
- test_logging: Fix test_udp_reconnection() by increasing the
timeout from 100 ms to 5 minutes (LONG_TIMEOUT). Patch by Victor
Stinner.
- test_capi: Fix test_no_FatalError_infinite_loop() to no longer
write a coredump, by using test.support.SuppressCrashReport. Patch
by Victor Stinner.
- Avoid creating a reference to the test object in
:meth:`~unittest.TestResult.collectedDurations`.
- Moved tests for zipfile.Path into Lib/test/test_zipfile/_path.
Made zipfile._path a package.
- Check for linux/limits.h before including it in
Modules/posixmodule.c.
- Detect MPI compilers in :file:`configure`.
- Add experimental wasi-threads support. Patch by Takashi Yamamoto.
- Update Windows build to use OpenSSL 3.0.9
- Update macOS installer to use OpenSSL 3.0.9.
- Fix bugs in the Argument Clinic destination <name> clear command;
the destination buffers would never be cleared, and the
destination directive parser would simply continue to the fault
handler after processing the command. Patch by Erlend E. Aasland.
- freeze now fetches CONFIG_ARGS from the original CPython instance
the Makefile uses to call utility scripts. Patch by Ijtaba
Hussain.
- :c:func:`PyModule_AddObjectRef` is now only available in the
limited API version 3.10 or later.
-------------------------------------------------------------------
Fri Aug 4 06:37:41 UTC 2023 - Dirk Müller <dmueller@suse.com>
- add externally_managed.in to label this build as PEP-668 managed
-------------------------------------------------------------------
Thu Aug 3 14:13:30 UTC 2023 - Matej Cepl <mcepl@suse.com>

View File

@ -105,7 +105,7 @@
%define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so
%bcond_without profileopt
Name: %{python_pkg_name}%{psuffix}
Version: 3.12.0b4
Version: 3.12.0rc1
Release: 0
Summary: Python 3 Interpreter
License: Python-2.0
@ -114,6 +114,7 @@ Source0: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.ta
Source1: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.tar.xz.asc
Source2: baselibs.conf
Source3: README.SUSE
Source4: externally_managed.in
Source7: macros.python3
Source8: import_failed.py
Source9: import_failed.map
@ -162,9 +163,6 @@ Patch34: skip-test_pyobject_freed_is_freed.patch
# PATCH-FIX-SLE fix_configure_rst.patch bpo#43774 mcepl@suse.com
# remove duplicate link targets and make documentation with old Sphinx in SLE
Patch35: fix_configure_rst.patch
# PATCH-FIX-UPSTREAM Revert-gh105127-left-tests.patch bsc#1210638 mcepl@suse.com
# Partially revert previous patch
Patch41: Revert-gh105127-left-tests.patch
BuildRequires: autoconf-archive
BuildRequires: automake
BuildRequires: fdupes
@ -433,7 +431,6 @@ other applications.
%patch34 -p1
# %%endif
%patch35 -p1
%patch41 -p1
# drop Autoconf version requirement
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
@ -707,6 +704,9 @@ rm %{buildroot}%{_libdir}/libpython3.so
rm %{buildroot}%{_libdir}/pkgconfig/{python3,python3-embed}.pc
%endif
# PEP-0668 mark this as a distro maintained python
sed -e 's,__PYTHONPREFIX__,%{python_pkg_name},' -e 's,__PYTHON__,python%{python_version},' < %{SOURCE4} > %{buildroot}%{sitedir}/EXTERNALLY-MANAGED
# link shared library instead of static library that tools expect
ln -s ../../libpython%{python_abi}.so %{buildroot}%{_libdir}/python%{python_version}/config-%{python_abi}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}/libpython%{python_abi}.so
@ -902,6 +902,8 @@ echo %{sitedir}/_import_failed > %{buildroot}/%{sitedir}/site-packages/zzzz-impo
%{_mandir}/man1/python3.1%{?ext_man}
%endif
%{_mandir}/man1/python%{python_version}.1%{?ext_man}
# PEP-0668
%{sitedir}/EXTERNALLY-MANAGED
# license text, not a doc because the code can use it at run-time
%{sitedir}/LICENSE.txt
# RPM macros

View File

@ -2,8 +2,10 @@
Lib/test/test_capi/test_mem.py | 1 +
1 file changed, 1 insertion(+)
--- a/Lib/test/test_capi/test_mem.py
+++ b/Lib/test/test_capi/test_mem.py
Index: Python-3.12.0rc1/Lib/test/test_capi/test_mem.py
===================================================================
--- Python-3.12.0rc1.orig/Lib/test/test_capi/test_mem.py
+++ Python-3.12.0rc1/Lib/test/test_capi/test_mem.py
@@ -110,6 +110,7 @@ class PyMemDebugTests(unittest.TestCase)
def test_pyobject_forbidden_bytes_is_freed(self):
self.check_pyobject_is_freed('check_pyobject_forbidden_bytes_is_freed')

View File

@ -2,8 +2,10 @@
Lib/test/test_subprocess.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
Index: Python-3.12.0rc1/Lib/test/test_subprocess.py
===================================================================
--- Python-3.12.0rc1.orig/Lib/test/test_subprocess.py
+++ Python-3.12.0rc1/Lib/test/test_subprocess.py
@@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase):
"time.sleep(3600)"],
# Some heavily loaded buildbots (sparc Debian 3.x) require