forked from pool/python311
- gh-131809: Update bundled libexpat to 2.7.1
- gh-131261: Upgrade to libexpat 2.7.0
- gh-105704: When using urllib.parse.urlsplit() and
urllib.parse.urlparse() host parsing would not reject domain
names containing square brackets ([ and ]). Square brackets
are only valid for IPv6 and IPvFuture hosts according to RFC
3986 Section 3.2.2 (bsc#1236705, CVE-2025-0938,
gh#python/cpython#105704).
- gh-121284: Fix bug in the folding of rfc2047 encoded-words
when flattening an email message using a modern email
policy. Previously when an encoded-word was too long for
a line, it would be decoded, split across lines, and
re-encoded. But commas and other special characters in the
original text could be left unencoded and unquoted. This
could theoretically be used to spoof header lines using a
carefully constructed encoded-word if the resulting rendered
email was transmitted or re-parsed.
- gh-80222: Fix bug in the folding of quoted strings
when flattening an email message using a modern email
policy. Previously when a quoted string was folded so that
it spanned more than one line, the surrounding quotes and
internal escapes would be omitted. This could theoretically
be used to spoof header lines using a carefully constructed
quoted string if the resulting rendered email was transmitted
or re-parsed.
- gh-119511: Fix a potential denial of service in the imaplib
module. When connecting to a malicious server, it could
cause an arbitrary amount of memory to be allocated. On many
systems this is harmless as unused virtual memory is only
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python311?expand=0&rev=167
216 lines
9.2 KiB
Diff
216 lines
9.2 KiB
Diff
From 910f38d9768d39d4d31426743ae4081ed1ab66b6 Mon Sep 17 00:00:00 2001
|
|
From: Michal Cyprian <m.cyprian@gmail.com>
|
|
Date: Mon, 26 Jun 2017 16:32:56 +0200
|
|
Subject: [PATCH] 00251: Change user install location
|
|
|
|
Set values of prefix and exec_prefix in distutils install command
|
|
to /usr/local if executable is /usr/bin/python* and RPM build
|
|
is not detected to make pip and distutils install into separate location.
|
|
|
|
Fedora Change: https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
|
|
---
|
|
Lib/distutils/command/install.py | 15 +++++++++++++--
|
|
Lib/site.py | 9 ++++++++-
|
|
2 files changed, 21 insertions(+), 3 deletions(-)
|
|
|
|
Index: Python-3.11.8/Lib/distutils/command/install.py
|
|
===================================================================
|
|
--- Python-3.11.8.orig/Lib/distutils/command/install.py
|
|
+++ Python-3.11.8/Lib/distutils/command/install.py
|
|
@@ -441,8 +441,19 @@ class install(Command):
|
|
raise DistutilsOptionError(
|
|
"must not supply exec-prefix without prefix")
|
|
|
|
- self.prefix = os.path.normpath(sys.prefix)
|
|
- self.exec_prefix = os.path.normpath(sys.exec_prefix)
|
|
+ # self.prefix is set to sys.prefix + /local/
|
|
+ # if neither RPM build nor virtual environment is
|
|
+ # detected to make pip and distutils install packages
|
|
+ # into the separate location.
|
|
+ if (not (hasattr(sys, 'real_prefix') or
|
|
+ sys.prefix != sys.base_prefix) and
|
|
+ 'RPM_BUILD_ROOT' not in os.environ):
|
|
+ addition = "/local"
|
|
+ else:
|
|
+ addition = ""
|
|
+
|
|
+ self.prefix = os.path.normpath(sys.prefix) + addition
|
|
+ self.exec_prefix = os.path.normpath(sys.exec_prefix) + addition
|
|
|
|
else:
|
|
if self.exec_prefix is None:
|
|
Index: Python-3.11.8/Lib/site.py
|
|
===================================================================
|
|
--- Python-3.11.8.orig/Lib/site.py
|
|
+++ Python-3.11.8/Lib/site.py
|
|
@@ -387,8 +387,15 @@ def getsitepackages(prefixes=None):
|
|
return sitepackages
|
|
|
|
def addsitepackages(known_paths, prefixes=None):
|
|
- """Add site-packages to sys.path"""
|
|
+ """Add site-packages to sys.path
|
|
+
|
|
+ '/usr/local' is included in PREFIXES if RPM build is not detected
|
|
+ to make packages installed into this location visible.
|
|
+
|
|
+ """
|
|
_trace("Processing global site-packages")
|
|
+ if ENABLE_USER_SITE and 'RPM_BUILD_ROOT' not in os.environ:
|
|
+ PREFIXES.insert(0, "/usr/local")
|
|
for sitedir in getsitepackages(prefixes):
|
|
if os.path.isdir(sitedir):
|
|
addsitedir(sitedir, known_paths)
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
|
|
Date: Mon, 15 Feb 2021 12:19:27 +0100
|
|
Subject: [PATCH] 00251: Change user install location
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Set values of base and platbase in sysconfig from /usr
|
|
to /usr/local when RPM build is not detected
|
|
to make pip and similar tools install into separate location.
|
|
|
|
Fedora Change: https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
|
|
Downstream only.
|
|
|
|
We've tried to rework in Fedora 36/Python 3.10 to follow https://bugs.python.org/issue43976
|
|
but we have identified serious problems with that approach,
|
|
see https://bugzilla.redhat.com/2026979 or https://bugzilla.redhat.com/2097183
|
|
|
|
pypa/distutils integration: https://github.com/pypa/distutils/pull/70
|
|
|
|
Co-authored-by: Petr Viktorin <encukou@gmail.com>
|
|
Co-authored-by: Miro Hrončok <miro@hroncok.cz>
|
|
Co-authored-by: Michal Cyprian <m.cyprian@gmail.com>
|
|
Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
|
|
---
|
|
Lib/site.py | 9 ++++++-
|
|
Lib/sysconfig.py | 49 +++++++++++++++++++++++++++++++++++++-
|
|
Lib/test/test_sysconfig.py | 17 +++++++++++--
|
|
3 files changed, 71 insertions(+), 4 deletions(-)
|
|
|
|
Index: Python-3.11.9/Lib/sysconfig.py
|
|
===================================================================
|
|
--- Python-3.11.9.orig/Lib/sysconfig.py
|
|
+++ Python-3.11.9/Lib/sysconfig.py
|
|
@@ -103,6 +103,11 @@ if os.name == 'nt':
|
|
else:
|
|
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
|
|
|
+# For a brief period of time in the Fedora 36 life cycle,
|
|
+# this installation scheme existed and was documented in the release notes.
|
|
+# For backwards compatibility, we keep it here (at least on 3.10 and 3.11).
|
|
+_INSTALL_SCHEMES['rpm_prefix'] = _INSTALL_SCHEMES['posix_prefix']
|
|
+
|
|
|
|
# NOTE: site.py has copy of this function.
|
|
# Sync it when modify this function.
|
|
@@ -162,6 +167,19 @@ if _HAS_USER_BASE:
|
|
},
|
|
}
|
|
|
|
+# This is used by distutils.command.install in the stdlib
|
|
+# as well as pypa/distutils (e.g. bundled in setuptools).
|
|
+# The self.prefix value is set to sys.prefix + /local/
|
|
+# if neither RPM build nor virtual environment is
|
|
+# detected to make distutils install packages
|
|
+# into the separate location.
|
|
+# https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
|
|
+if (not (hasattr(sys, 'real_prefix') or
|
|
+ sys.prefix != sys.base_prefix) and
|
|
+ 'RPM_BUILD_ROOT' not in os.environ):
|
|
+ _prefix_addition = '/local'
|
|
+
|
|
+
|
|
_SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include',
|
|
'scripts', 'data')
|
|
|
|
@@ -258,11 +276,40 @@ def _extend_dict(target_dict, other_dict
|
|
target_dict[key] = value
|
|
|
|
|
|
+_CONFIG_VARS_LOCAL = None
|
|
+
|
|
+
|
|
+def _config_vars_local():
|
|
+ # This function returns the config vars with prefixes amended to /usr/local
|
|
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
|
|
+ global _CONFIG_VARS_LOCAL
|
|
+ if _CONFIG_VARS_LOCAL is None:
|
|
+ _CONFIG_VARS_LOCAL = dict(get_config_vars())
|
|
+ _CONFIG_VARS_LOCAL['base'] = '/usr/local'
|
|
+ _CONFIG_VARS_LOCAL['platbase'] = '/usr/local'
|
|
+ return _CONFIG_VARS_LOCAL
|
|
+
|
|
+
|
|
def _expand_vars(scheme, vars):
|
|
res = {}
|
|
if vars is None:
|
|
vars = {}
|
|
- _extend_dict(vars, get_config_vars())
|
|
+
|
|
+ # when we are not in a virtual environment or an RPM build
|
|
+ # we change '/usr' to '/usr/local'
|
|
+ # to avoid surprises, we explicitly check for the /usr/ prefix
|
|
+ # Python virtual environments have different prefixes
|
|
+ # we only do this for posix_prefix, not to mangle the venv scheme
|
|
+ # posix_prefix is used by sudo pip install
|
|
+ # we only change the defaults here, so explicit --prefix will take precedence
|
|
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
|
|
+ if (scheme == 'posix_prefix' and
|
|
+ _PREFIX == '/usr' and
|
|
+ 'RPM_BUILD_ROOT' not in os.environ):
|
|
+ _extend_dict(vars, _config_vars_local())
|
|
+ else:
|
|
+ _extend_dict(vars, get_config_vars())
|
|
+
|
|
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.11.9/Lib/test/test_sysconfig.py
|
|
===================================================================
|
|
--- Python-3.11.9.orig/Lib/test/test_sysconfig.py
|
|
+++ Python-3.11.9/Lib/test/test_sysconfig.py
|
|
@@ -111,8 +111,19 @@ class TestSysConfig(unittest.TestCase):
|
|
for scheme in _INSTALL_SCHEMES:
|
|
for name in _INSTALL_SCHEMES[scheme]:
|
|
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars)
|
|
+ tested = get_path(name, scheme)
|
|
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
|
|
+ if tested.startswith('/usr/local'):
|
|
+ # /usr/local should only be used in posix_prefix
|
|
+ self.assertEqual(scheme, 'posix_prefix')
|
|
+ # Fedora CI runs tests for venv and virtualenv that check for other prefixes
|
|
+ self.assertEqual(sys.prefix, '/usr')
|
|
+ # When building the RPM of Python, %check runs this with RPM_BUILD_ROOT set
|
|
+ # Fedora CI runs this with RPM_BUILD_ROOT unset
|
|
+ self.assertNotIn('RPM_BUILD_ROOT', os.environ)
|
|
+ tested = tested.replace('/usr/local', '/usr')
|
|
self.assertEqual(
|
|
- os.path.normpath(get_path(name, scheme)),
|
|
+ os.path.normpath(tested),
|
|
os.path.normpath(expected),
|
|
)
|
|
|
|
@@ -345,7 +356,7 @@ class TestSysConfig(unittest.TestCase):
|
|
self.assertTrue(os.path.isfile(config_h), config_h)
|
|
|
|
def test_get_scheme_names(self):
|
|
- wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv']
|
|
+ wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv', 'rpm_prefix']
|
|
if HAS_USER_BASE:
|
|
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
|
|
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
|
|
@@ -357,6 +368,8 @@ class TestSysConfig(unittest.TestCase):
|
|
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())"
|
|
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd))
|
|
|
|
+ @unittest.skipIf('RPM_BUILD_ROOT' not in os.environ,
|
|
+ "Test doesn't expect Fedora's paths")
|
|
def test_user_similar(self):
|
|
# Issue #8759: make sure the posix scheme for the users
|
|
# is similar to the global posix_prefix one
|