Date: Sat, 09 May 2026 22:03:26 +0000 From: Vladimir Druzenko <vvd@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Cc: Matthias Andree <mandree@FreeBSD.org> Subject: git: 3778d515a560 - main - lang/python315: Repocopy of lang/python314 Message-ID: <69ffaf2e.32ccc.5b3dafbb@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by vvd: URL: https://cgit.FreeBSD.org/ports/commit/?id=3778d515a560449213af111ecdfd0f1d9d0b81b3 commit 3778d515a560449213af111ecdfd0f1d9d0b81b3 Author: Matthias Andree <mandree@FreeBSD.org> AuthorDate: 2026-05-09 21:57:35 +0000 Commit: Vladimir Druzenko <vvd@FreeBSD.org> CommitDate: 2026-05-09 22:02:59 +0000 lang/python315: Repocopy of lang/python314 PR: 295131 Sponsored by: UNIS Labs --- lang/python315/Makefile | 201 + lang/python315/Makefile.version | 7 + lang/python315/distinfo | 3 + lang/python315/files/patch-Lib_test_test__posix.py | 18 + lang/python315/files/patch-Makefile.pre.in | 62 + .../python315/files/patch-Misc_python-config.sh.in | 11 + ...211-reject-CR_LF-in-HTTP-tunnel-request-headers | 108 + ...ix-quadratic-regex-backtracking-in-configparser | 83 + ...action_substitution-bypass-of-dash-prefix-check | 66 + ...tch-gh-148395-fix-possible-uaf-in-decompressors | 65 + lang/python315/files/pkg-message.in | 12 + lang/python315/pkg-descr | 2 + lang/python315/pkg-plist | 8316 ++++++++++++++++++++ 13 files changed, 8954 insertions(+) diff --git a/lang/python315/Makefile b/lang/python315/Makefile new file mode 100644 index 000000000000..404a636e7cf6 --- /dev/null +++ b/lang/python315/Makefile @@ -0,0 +1,201 @@ +PORTNAME= python +DISTVERSION= ${PYTHON_DISTVERSION} # see Makefile.version +PORTREVISION= 2 +CATEGORIES= lang python +MASTER_SITES= PYTHON/ftp/python/${DISTVERSION:C/[a-z].*//} +PKGNAMESUFFIX= ${PYTHON_SUFFIX} +DISTNAME= Python-${DISTVERSION} +DIST_SUBDIR= python + +MAINTAINER= mandree@FreeBSD.org +COMMENT= Interpreted object-oriented programming language +WWW= https://www.python.org/ + +LICENSE= PSFL + +LIB_DEPENDS= libexpat.so:textproc/expat2 \ + libffi.so:devel/libffi \ + libzstd.so:archivers/zstd + +USES= compiler:c11 cpe ncurses pathfix pkgconfig readline \ + shebangfix ssl tar:xz +PATHFIX_MAKEFILEIN= Makefile.pre.in +USE_LDCONFIG= yes +GNU_CONFIGURE= yes +python_CMD= ${PREFIX}/bin/python${PYTHON_DISTVERSION:R} +SHEBANG_FILES= Lib/*.py Lib/*/*.py Lib/*/*/*.py Lib/*/*/*/*.py +SHEBANG_FILES+= Lib/test/archivetestdata/exe_with_z64 \ + Lib/test/archivetestdata/exe_with_zip \ + Lib/test/archivetestdata/header.sh + +# Duplicate python.mk variables. TODO: Let lang/python?? ports use python.mk bits. +PYTHON_VER= ${PYTHON_DISTVERSION:R} +PYTHON_VERSION= python${PYTHON_VER} +PYTHON_SUFFIX= ${PYTHON_VER:S/.//g} + +DISABLED_EXTENSIONS= _gdbm _sqlite3 _tkinter +CONFIGURE_ARGS+= --enable-shared --without-ensurepip --with-system-expat +CONFIGURE_ENV+= OPT="" # Null out OPT to respect user CFLAGS and remove optimizations + +INSTALL_TARGET= altinstall # Don't want cloberring of unprefixed files + +# TEST_TARGET= buildbottest # that's the --slow-ci with more resources/longer timeouts +TEST_TARGET= test # that's the --fast-ci with tighter timeouts and using less resources +# TEST_ARGS: test_gdb requires debug symbols for the test_gdb.test_pretty_print test, so skip it unless defined(WITH_DEBUG) +TEST_ARGS= TESTOPTS="-j${MAKE_JOBS_NUMBER} ${WITH_DEBUG:U-x test_gdb}" + +MAKE_ARGS+= COMPILEALL_OPTS=-j${MAKE_JOBS_NUMBER} \ + INSTALL_SHARED="${INSTALL_LIB}" # Strip shared library + +SUB_FILES= pkg-message +SUB_LIST= PYTHON_SUFFIX=${PYTHON_SUFFIX} + +PLIST_SUB= ABI=${ABIFLAGS} \ + XY=${PYTHON_SUFFIX} \ + XYDOT=${PYTHON_VER} \ + XYZDOT=${DISTVERSION:C/[a-z].*//} \ + OSMAJOR=${OSVERSION:C/([0-9]*)[0-9]{5}/\1/} # For plat-freebsd* in pkg-plist. https://bugs.python.org/issue19554 + +OPTIONS_DEFINE= DEBUG IPV6 LIBMPDEC LTO NLS PYMALLOC +OPTIONS_DEFAULT= LIBMPDEC LTO PYMALLOC +OPTIONS_EXCLUDE_powerpc64= LTO +OPTIONS_EXCLUDE_riscv64= LTO +OPTIONS_RADIO= HASH +OPTIONS_RADIO_HASH= FNV SIPHASH +OPTIONS_SUB= yes + +LIBMPDEC_DESC= Use libmpdec from ports instead of bundled version +LTO_DESC= Use Link-Time Optimization with -flto=thin +LTOFULL_DESC= Use -flto=full (not =thin) (faster build at more CPU time) +NLS_DESC= Enable gettext support for the locale module +PYMALLOC_DESC= Enable specialized mallocs + +HASH_DESC= Hash Algorithm (PEP-456) +FNV_DESC= Modified Fowler-Noll-Vo Algorithm +SIPHASH_DESC= SipHash24 Algorithm + +FNV_CONFIGURE_ON= --with-hash-algorithm=fnv +SIPHASH_CONFIGURE_ON= --with-hash-algorithm=siphash24 + +DEBUG_CONFIGURE_WITH= pydebug +IPV6_CONFIGURE_ENABLE= ipv6 + +LIBMPDEC_CONFIGURE_ON= --with-system-libmpdec +LIBMPDEC_LIB_DEPENDS= libmpdec.so:math/mpdecimal + +LTO_CONFIGURE_ON= --with-lto=full + +# Use CPPFLAGS over CFLAGS due to -I ordering, causing elementtree and pyexpat +# to break in Python 2.7, or preprocessor complaints in Python >= 3.3 +# Upstream Issue: https://bugs.python.org/issue6299 +NLS_USES= gettext-runtime +NLS_CPPFLAGS= -I${LOCALBASE}/include +NLS_LIBS= -L${LOCALBASE}/lib -lintl +NLS_CONFIGURE_ENV_OFF= ac_cv_lib_intl_textdomain=no ac_cv_header_libintl_h=no + +PYMALLOC_CONFIGURE_WITH= pymalloc + +.include "${.CURDIR}/Makefile.version" +.include <bsd.port.options.mk> + +.if ${PORT_OPTIONS:MDEBUG} +ABIFLAGS:= d${ABIFLAGS} +.endif + +.if !empty(ABIFLAGS) +PLIST_FILES+= bin/python${PYTHON_VER}${ABIFLAGS} \ + bin/python${PYTHON_VER}${ABIFLAGS}-config \ + libdata/pkgconfig/python-${PYTHON_VER}${ABIFLAGS}.pc \ + libdata/pkgconfig/python-${PYTHON_VER}${ABIFLAGS}-embed.pc +.endif + +.if ${ARCH} == sparc64 +CFLAGS+= -DPYTHON_DEFAULT_RECURSION_LIMIT=900 +.endif + +# See https://bugs.freebsd.org/115940 and https://bugs.freebsd.org/193650 +.if !exists(/usr/bin/ypcat) || defined(WITHOUT_NIS) +PLIST_SUB+= NO_NIS="@comment " +DISABLED_EXTENSIONS+= nis +.else +PLIST_SUB+= NO_NIS="" +.endif + +# Python 3.10 requires OpenSSL >= 1.1.1 (PEP 644), so with +# libressl, some modules are not built +.if ${SSL_DEFAULT:Mlibressl*} +PLIST_SUB+= SUPPORTED_OPENSSL="@comment " +.else +PLIST_SUB+= SUPPORTED_OPENSSL="" +.endif + +post-patch: +# disable the detection of includes and library from e2fsprogs-libuuid, +# which introduces hidden dependency and breaks build + @${REINPLACE_CMD} -e 's|uuid/uuid.h|ignore_&|' ${WRKSRC}/configure +# disable detection of multiarch as it breaks with clang >= 13, which adds a +# major.minor version number in -print-multiarch output, confusing Python + @${REINPLACE_CMD} -e 's|^\( *MULTIARCH=\).*--print-multiarch.*|\1|' ${WRKSRC}/configure +# Apply DISABLED_EXTENSIONS + @${ECHO_CMD} '*disabled*' > ${WRKSRC}/Modules/Setup.local +. for _module in ${DISABLED_EXTENSIONS} + @${ECHO_CMD} ${_module} >> ${WRKSRC}/Modules/Setup.local +. endfor +# Strip Expat module + ${RM} -R ${WRKSRC}/Modules/expat + +post-install: +.if ! ${PORT_OPTIONS:MDEBUG} + ${RM} ${STAGEDIR}${PREFIX}/lib/libpython3.so # Upstream Issue: https://bugs.python.org/issue17975 +.endif + ${LN} -sf libpython${PYTHON_VER}${ABIFLAGS}.so.1.0 ${STAGEDIR}${PREFIX}/lib/libpython${PYTHON_VER}${ABIFLAGS}.so.1 +# This code block exists for the qemu-user enabled cross build environment. +# When using this environment in poudriere, CC is not set to the default +# of /usr/bin/cc and a cross-compile toolchain is used. We need to hand +# edit this so that the run time configuration for python matches what the +# FreeBSD base system provides. sbruno 02Aug2017 +.if ${CC} == /nxb-bin/usr/bin/cc + @${REINPLACE_CMD} -e 's=/nxb-bin==g' \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${ABIFLAGS}_freebsd_.py + @cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \ + ./python -E -m compileall -d ${PREFIX}/lib/python${PYTHON_VER} \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${ABIFLAGS}_freebsd_.py + @cd ${WRKSRC} && ${SETENV} LD_LIBRARY_PATH=${WRKSRC} \ + ./python -E -O -m compileall -d ${PREFIX}/lib/python${PYTHON_VER} \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/_sysconfigdata_${ABIFLAGS}_freebsd_.py + @${REINPLACE_CMD} -e 's=/nxb-bin==g' \ + ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/config-${PYTHON_VER}${ABIFLAGS}/Makefile +.endif + for i in ${STAGEDIR}${PREFIX}/lib/python${PYTHON_VER}/lib-dynload/*.so; do \ + ${STRIP_CMD} $$i; done # Strip shared extensions + ${INSTALL_DATA} ${WRKSRC}/Tools/gdb/libpython.py \ + ${STAGEDIR}${PREFIX}/lib/libpython${PYTHON_VER}${ABIFLAGS}.so.1.0-gdb.py + +_sigstorebundle=${DISTFILES}.sigstore +${_sigstorebundle}: + ${FETCH_CMD} ${MASTER_SITES}/${_sigstorebundle} + +sigstore-verify: ${_sigstorebundle} checksum + sigstore verify identity \ + --bundle ${DISTFILES}.sigstore \ + --cert-identity hugo@python.org \ + --cert-oidc-issuer https://github.com/login/oauth \ + ${DISTDIR}/${DIST_SUBDIR}/${DISTFILES} + +pre-test: + @${ECHO_CMD} "=== NOTE: the py314-* gdbm, sqlite3, tkinter modules must be rebuilt before the test ===" +.if ${PORT_OPTIONS:MDEBUG} + @${ECHO_CMD} "=== NOTE: The test_ssl test is known to fail with DEBUG option enabled ===" +.endif +.if empty(PORT_OPTIONS:MIPV6) + @${ECHO_CMD} "=== NOTE: Some asynch tests require IPV6 support enabled, expect some test failures ===" +.endif +.if empty(PORT_OPTIONS:MPYMALLOC) + @${ECHO_CMD} "=== NOTE: Some tests depend on PYMALLOC option enabled, expect some test failures ===" +.endif + sleep 5 + +post-clean: + @${RM} ${_sigstorebundle} + +.include <bsd.port.mk> diff --git a/lang/python315/Makefile.version b/lang/python315/Makefile.version new file mode 100644 index 000000000000..c8ccfa3963b0 --- /dev/null +++ b/lang/python315/Makefile.version @@ -0,0 +1,7 @@ +# Mk/Uses/python.mk includes this file, don't remove it! + +# Do not forget to +# 1. Update python documentation (lang/python-doc-*) +# Run "make -C lang/python-doc-html makesum" +# 2. Remove PORTREVISION in Makefile +PYTHON_DISTVERSION= 3.14.4 diff --git a/lang/python315/distinfo b/lang/python315/distinfo new file mode 100644 index 000000000000..7c5dead58955 --- /dev/null +++ b/lang/python315/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1775640582 +SHA256 (python/Python-3.14.4.tar.xz) = d923c51303e38e249136fc1bdf3568d56ecb03214efdef48516176d3d7faaef8 +SIZE (python/Python-3.14.4.tar.xz) = 23855332 diff --git a/lang/python315/files/patch-Lib_test_test__posix.py b/lang/python315/files/patch-Lib_test_test__posix.py new file mode 100644 index 000000000000..6dc5ab44b540 --- /dev/null +++ b/lang/python315/files/patch-Lib_test_test__posix.py @@ -0,0 +1,18 @@ +--- Lib/test/test_posix.py.orig 2025-11-01 21:42:35 UTC ++++ Lib/test/test_posix.py +@@ -412,11 +412,12 @@ class PosixTester(unittest.TestCase): + # so skip Solaris-based since they are likely to have ZFS. + # issue33655: Also ignore EINVAL on *BSD since ZFS is also + # often used there. +- if inst.errno == errno.EINVAL and sys.platform.startswith( ++ if (inst.errno == errno.EINVAL or inst.errno == errno.ENODEV) and sys.platform.startswith( + ('sunos', 'freebsd', 'openbsd', 'gnukfreebsd')): + raise unittest.SkipTest("test may fail on ZFS filesystems") +- elif inst.errno == errno.EOPNOTSUPP and sys.platform.startswith("netbsd"): +- raise unittest.SkipTest("test may fail on FFS filesystems") ++ # FreeBSD may return EOPNOTSUPP in some versions ++ elif inst.errno == errno.EOPNOTSUPP and sys.platform.startswith(('netbsd', 'freebsd')): ++ raise unittest.SkipTest("test may fail on ZFS and FFS filesystems") + else: + raise + finally: diff --git a/lang/python315/files/patch-Makefile.pre.in b/lang/python315/files/patch-Makefile.pre.in new file mode 100644 index 000000000000..e5e8bfa7e0e9 --- /dev/null +++ b/lang/python315/files/patch-Makefile.pre.in @@ -0,0 +1,62 @@ +--- Makefile.pre.in.orig 2025-11-01 17:59:00 UTC ++++ Makefile.pre.in +@@ -84,7 +84,6 @@ BASECPPFLAGS= @BASECPPFLAGS@ + OPT= @OPT@ + BASECFLAGS= @BASECFLAGS@ + BASECPPFLAGS= @BASECPPFLAGS@ +-CONFIGURE_CFLAGS= @CFLAGS@ + # CFLAGS_NODIST is used for building the interpreter and stdlib C extensions. + # Use it when a compiler flag should _not_ be part of the distutils CFLAGS + # once Python is installed (Issue #21121). +@@ -96,18 +95,16 @@ CONFIGURE_LDFLAGS_NOLTO=@LDFLAGS_NOLTO@ + # LDFLAGS_NOLTO is an extra flag to disable lto. It is used to speed up building + # of _bootstrap_python and _freeze_module tools, which don't need LTO. + CONFIGURE_LDFLAGS_NOLTO=@LDFLAGS_NOLTO@ +-CONFIGURE_CPPFLAGS= @CPPFLAGS@ +-CONFIGURE_LDFLAGS= @LDFLAGS@ + # Avoid assigning CFLAGS, LDFLAGS, etc. so users can use them on the + # command line to append to these values without stomping the pre-set + # values. +-PY_CFLAGS= $(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) ++PY_CFLAGS= $(BASECFLAGS) $(OPT) $(CFLAGS) $(EXTRA_CFLAGS) + PY_CFLAGS_NODIST=$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal -I$(srcdir)/Include/internal/mimalloc + # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to + # be able to build extension modules using the directories specified in the + # environment variables +-PY_CPPFLAGS= $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS) +-PY_LDFLAGS= $(CONFIGURE_LDFLAGS) $(LDFLAGS) ++PY_CPPFLAGS= $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CPPFLAGS) ++PY_LDFLAGS= $(LDFLAGS) + PY_LDFLAGS_NODIST=$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST) + PY_LDFLAGS_NOLTO=$(PY_LDFLAGS) $(CONFIGURE_LDFLAGS_NOLTO) $(LDFLAGS_NODIST) + NO_AS_NEEDED= @NO_AS_NEEDED@ +@@ -2492,14 +2489,6 @@ bininstall: commoninstall altbininstall + else true; \ + fi + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python3$(EXE)) +- -if test "$(VERSION)" != "$(LDVERSION)"; then \ +- rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)-config; \ +- (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(LDVERSION)-config python$(VERSION)-config); \ +- rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION).pc; \ +- (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION).pc python-$(VERSION).pc); \ +- rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION)-embed.pc; \ +- (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION)-embed.pc python-$(VERSION)-embed.pc); \ +- fi + -rm -f $(DESTDIR)$(BINDIR)/python3-config + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python3-config) + -rm -f $(DESTDIR)$(LIBPC)/python3.pc +@@ -2952,6 +2941,14 @@ libainstall: all scripts + $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh + $(INSTALL_SCRIPT) python-config.py $(DESTDIR)$(LIBPL)/python-config.py + $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(LDVERSION)-config ++ -if test "$(VERSION)" != "$(LDVERSION)"; then \ ++ rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)-config; \ ++ (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(LDVERSION)-config python$(VERSION)-config); \ ++ rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION).pc; \ ++ (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION).pc python-$(VERSION).pc); \ ++ rm -f $(DESTDIR)$(LIBPC)/python-$(VERSION)-embed.pc; \ ++ (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(LDVERSION)-embed.pc python-$(VERSION)-embed.pc); \ ++ fi + $(INSTALL_SCRIPT) $(SCRIPT_IDLE) $(DESTDIR)$(BINDIR)/idle$(VERSION) + $(INSTALL_SCRIPT) $(SCRIPT_PYDOC) $(DESTDIR)$(BINDIR)/pydoc$(VERSION) + @if [ -s Modules/python.exp -a \ diff --git a/lang/python315/files/patch-Misc_python-config.sh.in b/lang/python315/files/patch-Misc_python-config.sh.in new file mode 100644 index 000000000000..7da9da93d197 --- /dev/null +++ b/lang/python315/files/patch-Misc_python-config.sh.in @@ -0,0 +1,11 @@ +--- Misc/python-config.sh.in.orig 2025-01-16 01:47:29 UTC ++++ Misc/python-config.sh.in +@@ -21,7 +21,7 @@ installed_prefix () + # Returns the actual prefix where this script was installed to. + installed_prefix () + { +- RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) ++ RESULT=$(dirname $(cd $(dirname $(realpath "$1")) && pwd -P)) + if which readlink >/dev/null 2>&1 ; then + if readlink -f "$RESULT" >/dev/null 2>&1; then + RESULT=$(readlink -f "$RESULT") diff --git a/lang/python315/files/patch-gh-146211-reject-CR_LF-in-HTTP-tunnel-request-headers b/lang/python315/files/patch-gh-146211-reject-CR_LF-in-HTTP-tunnel-request-headers new file mode 100644 index 000000000000..989f22a0529b --- /dev/null +++ b/lang/python315/files/patch-gh-146211-reject-CR_LF-in-HTTP-tunnel-request-headers @@ -0,0 +1,108 @@ +From afdd351544e8112d4070a31f2218f99256697472 Mon Sep 17 00:00:00 2001 +From: Seth Larson <seth@python.org> +Date: Fri, 10 Apr 2026 10:21:42 -0500 +Subject: [PATCH] gh-146211: Reject CR/LF in HTTP tunnel request headers + (GH-146212) (cherry picked from commit + 05ed7ce7ae9e17c23a04085b2539fe6d6d3cef69) + +Co-authored-by: Seth Larson <seth@python.org> +Co-authored-by: Illia Volochii <illia.volochii@gmail.com> +--- + Lib/http/client.py | 11 ++++- + Lib/test/test_httplib.py | 45 +++++++++++++++++++ + ...-03-20-09-29-42.gh-issue-146211.PQVbs7.rst | 2 + + 3 files changed, 57 insertions(+), 1 deletion(-) + create mode 100644 Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst + +diff --git a/Lib/http/client.py b/Lib/http/client.py +index 77f8d26291dfc2..6fb7d254ea9c27 100644 +--- ./Lib/http/client.py ++++ b/Lib/http/client.py +@@ -972,13 +972,22 @@ def _wrap_ipv6(self, ip): + return ip + + def _tunnel(self): ++ if _contains_disallowed_url_pchar_re.search(self._tunnel_host): ++ raise ValueError('Tunnel host can\'t contain control characters %r' ++ % (self._tunnel_host,)) + connect = b"CONNECT %s:%d %s\r\n" % ( + self._wrap_ipv6(self._tunnel_host.encode("idna")), + self._tunnel_port, + self._http_vsn_str.encode("ascii")) + headers = [connect] + for header, value in self._tunnel_headers.items(): +- headers.append(f"{header}: {value}\r\n".encode("latin-1")) ++ header_bytes = header.encode("latin-1") ++ value_bytes = value.encode("latin-1") ++ if not _is_legal_header_name(header_bytes): ++ raise ValueError('Invalid header name %r' % (header_bytes,)) ++ if _is_illegal_header_value(value_bytes): ++ raise ValueError('Invalid header value %r' % (value_bytes,)) ++ headers.append(b"%s: %s\r\n" % (header_bytes, value_bytes)) + headers.append(b"\r\n") + # Making a single send() call instead of one per line encourages + # the host OS to use a more optimal packet size instead of +diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py +index bcb828edec7c39..6f3eac6b98a4de 100644 +--- ./Lib/test/test_httplib.py ++++ b/Lib/test/test_httplib.py +@@ -369,6 +369,51 @@ def test_invalid_headers(self): + with self.assertRaisesRegex(ValueError, 'Invalid header'): + conn.putheader(name, value) + ++ def test_invalid_tunnel_headers(self): ++ cases = ( ++ ('Invalid\r\nName', 'ValidValue'), ++ ('Invalid\rName', 'ValidValue'), ++ ('Invalid\nName', 'ValidValue'), ++ ('\r\nInvalidName', 'ValidValue'), ++ ('\rInvalidName', 'ValidValue'), ++ ('\nInvalidName', 'ValidValue'), ++ (' InvalidName', 'ValidValue'), ++ ('\tInvalidName', 'ValidValue'), ++ ('Invalid:Name', 'ValidValue'), ++ (':InvalidName', 'ValidValue'), ++ ('ValidName', 'Invalid\r\nValue'), ++ ('ValidName', 'Invalid\rValue'), ++ ('ValidName', 'Invalid\nValue'), ++ ('ValidName', 'InvalidValue\r\n'), ++ ('ValidName', 'InvalidValue\r'), ++ ('ValidName', 'InvalidValue\n'), ++ ) ++ for name, value in cases: ++ with self.subTest((name, value)): ++ conn = client.HTTPConnection('example.com') ++ conn.set_tunnel('tunnel', headers={ ++ name: value ++ }) ++ conn.sock = FakeSocket('') ++ with self.assertRaisesRegex(ValueError, 'Invalid header'): ++ conn._tunnel() # Called in .connect() ++ ++ def test_invalid_tunnel_host(self): ++ cases = ( ++ 'invalid\r.host', ++ '\ninvalid.host', ++ 'invalid.host\r\n', ++ 'invalid.host\x00', ++ 'invalid host', ++ ) ++ for tunnel_host in cases: ++ with self.subTest(tunnel_host): ++ conn = client.HTTPConnection('example.com') ++ conn.set_tunnel(tunnel_host) ++ conn.sock = FakeSocket('') ++ with self.assertRaisesRegex(ValueError, 'Tunnel host can\'t contain control characters'): ++ conn._tunnel() # Called in .connect() ++ + def test_headers_debuglevel(self): + body = ( + b'HTTP/1.1 200 OK\r\n' +diff --git a/Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst b/Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst +new file mode 100644 +index 00000000000000..4993633b8ebebb +--- /dev/null ++++ ./Misc/NEWS.d/next/Security/2026-03-20-09-29-42.gh-issue-146211.PQVbs7.rst +@@ -0,0 +1,2 @@ ++Reject CR/LF characters in tunnel request headers for the ++HTTPConnection.set_tunnel() method. diff --git a/lang/python315/files/patch-gh-146333-Fix-quadratic-regex-backtracking-in-configparser b/lang/python315/files/patch-gh-146333-Fix-quadratic-regex-backtracking-in-configparser new file mode 100644 index 000000000000..7dffa8ff1cfe --- /dev/null +++ b/lang/python315/files/patch-gh-146333-Fix-quadratic-regex-backtracking-in-configparser @@ -0,0 +1,83 @@ +From ab8704a8e05e2f926c10f994e4085e8726048fa4 Mon Sep 17 00:00:00 2001 +From: Joshua Swanson <22283299+joshuaswanson@users.noreply.github.com> +Date: Tue, 7 Apr 2026 16:10:34 +0200 +Subject: [PATCH] gh-146333: Fix quadratic regex backtracking in configparser + option parsing (GH-146399) + +Use negative lookahead in option regex to prevent backtracking, and to avoid changing logic outside the regexes (since people could use the regex directly). +(cherry picked from commit 7e0a0be4097f9d29d66fe23f5af86f18a34ed7dd) + +Co-authored-by: Joshua Swanson <22283299+joshuaswanson@users.noreply.github.com> +--- + Lib/configparser.py | 8 ++++++-- + Lib/test/test_configparser.py | 20 +++++++++++++++++++ + ...3-25-00-51-03.gh-issue-146333.LqdL__bn.rst | 3 +++ + 3 files changed, 29 insertions(+), 2 deletions(-) + create mode 100644 Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst + +diff --git a/Lib/configparser.py b/Lib/configparser.py +index d435a5c2fe0da2..e76647d339e913 100644 +--- ./Lib/configparser.py ++++ b/Lib/configparser.py +@@ -613,7 +613,9 @@ class RawConfigParser(MutableMapping): + \] # ] + """ + _OPT_TMPL = r""" +- (?P<option>.*?) # very permissive! ++ (?P<option> # very permissive! ++ (?:(?!{delim})\S)* # non-delimiter non-whitespace ++ (?:\s+(?:(?!{delim})\S)+)*) # optionally more words + \s*(?P<vi>{delim})\s* # any number of space/tab, + # followed by any of the + # allowed delimiters, +@@ -621,7 +623,9 @@ class RawConfigParser(MutableMapping): + (?P<value>.*)$ # everything up to eol + """ + _OPT_NV_TMPL = r""" +- (?P<option>.*?) # very permissive! ++ (?P<option> # very permissive! ++ (?:(?!{delim})\S)* # non-delimiter non-whitespace ++ (?:\s+(?:(?!{delim})\S)+)*) # optionally more words + \s*(?: # any number of space/tab, + (?P<vi>{delim})\s* # optionally followed by + # any of the allowed +diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py +index 1bfb53ccbb1398..d7c4f19c1a5ef0 100644 +--- ./Lib/test/test_configparser.py ++++ b/Lib/test/test_configparser.py +@@ -2270,6 +2270,26 @@ def test_section_bracket_in_key(self): + output.close() + + ++class ReDoSTestCase(unittest.TestCase): ++ """Regression tests for quadratic regex backtracking (gh-146333).""" ++ ++ def test_option_regex_does_not_backtrack(self): ++ # A line with many spaces between non-delimiter characters ++ # should be parsed in linear time, not quadratic. ++ parser = configparser.RawConfigParser() ++ content = "[section]\n" + "x" + " " * 40000 + "y" + "\n" ++ # This should complete almost instantly. Before the fix, ++ # it would take over a minute due to catastrophic backtracking. ++ with self.assertRaises(configparser.ParsingError): ++ parser.read_string(content) ++ ++ def test_option_regex_no_value_does_not_backtrack(self): ++ parser = configparser.RawConfigParser(allow_no_value=True) ++ content = "[section]\n" + "x" + " " * 40000 + "y" + "\n" ++ parser.read_string(content) ++ self.assertTrue(parser.has_option("section", "x" + " " * 40000 + "y")) ++ ++ + class MiscTestCase(unittest.TestCase): + def test__all__(self): + support.check__all__(self, configparser, not_exported={"Error"}) +diff --git a/Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst b/Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst +new file mode 100644 +index 00000000000000..96d86ecc0a0fb3 +--- /dev/null ++++ ./Misc/NEWS.d/next/Security/2026-03-25-00-51-03.gh-issue-146333.LqdL__bn.rst +@@ -0,0 +1,3 @@ ++Fix quadratic backtracking in :class:`configparser.RawConfigParser` option ++parsing regexes (``OPTCRE`` and ``OPTCRE_NV``). A crafted configuration line ++with many whitespace characters could cause excessive CPU usage. diff --git a/lang/python315/files/patch-gh-148169-fix-webbrowser-_action_substitution-bypass-of-dash-prefix-check b/lang/python315/files/patch-gh-148169-fix-webbrowser-_action_substitution-bypass-of-dash-prefix-check new file mode 100644 index 000000000000..5407326b750a --- /dev/null +++ b/lang/python315/files/patch-gh-148169-fix-webbrowser-_action_substitution-bypass-of-dash-prefix-check @@ -0,0 +1,66 @@ +From f529b9470752c28ab69c96f31b0dbc10db69b404 Mon Sep 17 00:00:00 2001 +From: Stan Ulbrych <stan@python.org> +Date: Mon, 13 Apr 2026 20:02:52 +0100 +Subject: [PATCH] gh-148169: Fix webbrowser `%action` substitution bypass of + dash-prefix check (GH-148170) (cherry picked from commit + d22922c8a7958353689dc4763dd72da2dea03fff) + +Co-authored-by: Stan Ulbrych <stan@python.org> +--- + Lib/test/test_webbrowser.py | 9 +++++++++ + Lib/webbrowser.py | 5 +++-- + .../2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst | 2 ++ + 3 files changed, 14 insertions(+), 2 deletions(-) + create mode 100644 Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst + +diff --git a/Lib/test/test_webbrowser.py b/Lib/test/test_webbrowser.py +index 404b3a31a5d2c9..bfbcf112b0b085 100644 +--- ./Lib/test/test_webbrowser.py ++++ b/Lib/test/test_webbrowser.py +@@ -119,6 +119,15 @@ def test_open_bad_new_parameter(self): + arguments=[URL], + kw=dict(new=999)) + ++ def test_reject_action_dash_prefixes(self): ++ browser = self.browser_class(name=CMD_NAME) ++ with self.assertRaises(ValueError): ++ browser.open('%action--incognito') ++ # new=1: action is "--new-window", so "%action" itself expands to ++ # a dash-prefixed flag even with no dash in the original URL. ++ with self.assertRaises(ValueError): ++ browser.open('%action', new=1) ++ + + class EdgeCommandTest(CommandTestMixin, unittest.TestCase): + +diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py +index 0e0b5034e5f53d..97aad6eea509eb 100644 +--- ./Lib/webbrowser.py ++++ b/Lib/webbrowser.py +@@ -274,7 +274,6 @@ def _invoke(self, args, remote, autoraise, url=None): + + def open(self, url, new=0, autoraise=True): + sys.audit("webbrowser.open", url) +- self._check_url(url) + if new == 0: + action = self.remote_action + elif new == 1: +@@ -288,7 +287,9 @@ def open(self, url, new=0, autoraise=True): + raise Error("Bad 'new' parameter to open(); " + f"expected 0, 1, or 2, got {new}") + +- args = [arg.replace("%s", url).replace("%action", action) ++ self._check_url(url.replace("%action", action)) ++ ++ args = [arg.replace("%action", action).replace("%s", url) + for arg in self.remote_args] + args = [arg for arg in args if arg] + success = self._invoke(args, True, autoraise, url) +diff --git a/Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst b/Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst +new file mode 100644 +index 00000000000000..45cdeebe1b6d64 +--- /dev/null ++++ ./Misc/NEWS.d/next/Security/2026-03-31-09-15-51.gh-issue-148169.EZJzz2.rst +@@ -0,0 +1,2 @@ ++A bypass in :mod:`webbrowser` allowed URLs prefixed with ``%action`` to pass ++the dash-prefix safety check. diff --git a/lang/python315/files/patch-gh-148395-fix-possible-uaf-in-decompressors b/lang/python315/files/patch-gh-148395-fix-possible-uaf-in-decompressors new file mode 100644 index 000000000000..d5532033752e --- /dev/null +++ b/lang/python315/files/patch-gh-148395-fix-possible-uaf-in-decompressors @@ -0,0 +1,65 @@ +From c8d8173c4b06d06902c99ec010ad785a30952880 Mon Sep 17 00:00:00 2001 +From: Stan Ulbrych <stan@python.org> +Date: Mon, 13 Apr 2026 02:14:54 +0100 +Subject: [PATCH] gh-148395: Fix a possible UAF in + `{LZMA,BZ2,_Zlib}Decompressor` (GH-148396) + +Fix dangling input pointer after `MemoryError` in _lzma/_bz2/_ZlibDecompressor.decompress +(cherry picked from commit 8fc66aef6d7b3ae58f43f5c66f9366cc8cbbfcd2) + +Co-authored-by: Stan Ulbrych <stan@python.org> +--- + .../Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst | 5 +++++ + Modules/_bz2module.c | 1 + + Modules/_lzmamodule.c | 1 + + Modules/zlibmodule.c | 1 + + 4 files changed, 8 insertions(+) + create mode 100644 Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst + +diff --git a/Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst b/Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst +new file mode 100644 +index 00000000000000..9502189ab199c1 +--- /dev/null ++++ ./Misc/NEWS.d/next/Security/2026-04-10-16-28-21.gh-issue-148395.kfzm0G.rst +@@ -0,0 +1,5 @@ ++Fix a dangling input pointer in :class:`lzma.LZMADecompressor`, ++:class:`bz2.BZ2Decompressor`, and internal :class:`!zlib._ZlibDecompressor` ++when memory allocation fails with :exc:`MemoryError`, which could let a ++subsequent :meth:`!decompress` call read or write through a stale pointer to ++the already-released caller buffer. +diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c +index 9e85e0de42cd8d..055ce82e7d2863 100644 +--- ./Modules/_bz2module.c ++++ b/Modules/_bz2module.c +@@ -593,6 +593,7 @@ decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length) + return result; + + error: ++ bzs->next_in = NULL; + Py_XDECREF(result); + return NULL; + } +diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c +index 462c2181fa6036..6785dc56730c5c 100644 +--- ./Modules/_lzmamodule.c ++++ b/Modules/_lzmamodule.c +@@ -1120,6 +1120,7 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length) + return result; + + error: ++ lzs->next_in = NULL; + Py_XDECREF(result); + return NULL; + } +diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c +index 5b6b0c5cac864a..a86aa5fdbb576c 100644 +--- ./Modules/zlibmodule.c ++++ b/Modules/zlibmodule.c +@@ -1675,6 +1675,7 @@ decompress(ZlibDecompressor *self, uint8_t *data, + return result; + + error: ++ self->zst.next_in = NULL; + Py_XDECREF(result); + return NULL; + } diff --git a/lang/python315/files/pkg-message.in b/lang/python315/files/pkg-message.in new file mode 100644 index 000000000000..286359c9f272 --- /dev/null +++ b/lang/python315/files/pkg-message.in @@ -0,0 +1,12 @@ +[ +{ type: install + message: <<EOM +Note that some standard Python modules are provided as separate ports +as they require additional dependencies. They are available as: + +py%%PYTHON_SUFFIX%%-gdbm databases/py-gdbm@py%%PYTHON_SUFFIX%% +py%%PYTHON_SUFFIX%%-sqlite3 databases/py-sqlite3@py%%PYTHON_SUFFIX%% +py%%PYTHON_SUFFIX%%-tkinter x11-toolkits/py-tkinter@py%%PYTHON_SUFFIX%% +EOM +} +] diff --git a/lang/python315/pkg-descr b/lang/python315/pkg-descr new file mode 100644 index 000000000000..a2103f1521db --- /dev/null +++ b/lang/python315/pkg-descr @@ -0,0 +1,2 @@ +Python is an interpreted object-oriented programming language, and is +often compared to Tcl, Perl or Scheme. diff --git a/lang/python315/pkg-plist b/lang/python315/pkg-plist new file mode 100644 index 000000000000..b5fe9727f492 --- /dev/null +++ b/lang/python315/pkg-plist @@ -0,0 +1,8316 @@ +bin/idle%%XYDOT%% +bin/pydoc%%XYDOT%% +bin/python%%XYDOT%% +bin/python%%XYDOT%%-config +include/python%%XYDOT%%%%ABI%%/Python.h +include/python%%XYDOT%%%%ABI%%/abstract.h +include/python%%XYDOT%%%%ABI%%/audit.h +include/python%%XYDOT%%%%ABI%%/bltinmodule.h +include/python%%XYDOT%%%%ABI%%/boolobject.h +include/python%%XYDOT%%%%ABI%%/bytearrayobject.h +include/python%%XYDOT%%%%ABI%%/bytesobject.h +include/python%%XYDOT%%%%ABI%%/ceval.h +include/python%%XYDOT%%%%ABI%%/codecs.h +include/python%%XYDOT%%%%ABI%%/compile.h +include/python%%XYDOT%%%%ABI%%/complexobject.h +include/python%%XYDOT%%%%ABI%%/cpython/abstract.h +include/python%%XYDOT%%%%ABI%%/cpython/audit.h +include/python%%XYDOT%%%%ABI%%/cpython/bytearrayobject.h +include/python%%XYDOT%%%%ABI%%/cpython/bytesobject.h +include/python%%XYDOT%%%%ABI%%/cpython/cellobject.h +include/python%%XYDOT%%%%ABI%%/cpython/ceval.h +include/python%%XYDOT%%%%ABI%%/cpython/classobject.h +include/python%%XYDOT%%%%ABI%%/cpython/code.h +include/python%%XYDOT%%%%ABI%%/cpython/compile.h +include/python%%XYDOT%%%%ABI%%/cpython/complexobject.h +include/python%%XYDOT%%%%ABI%%/cpython/context.h +include/python%%XYDOT%%%%ABI%%/cpython/critical_section.h +include/python%%XYDOT%%%%ABI%%/cpython/descrobject.h +include/python%%XYDOT%%%%ABI%%/cpython/dictobject.h +include/python%%XYDOT%%%%ABI%%/cpython/fileobject.h +include/python%%XYDOT%%%%ABI%%/cpython/fileutils.h +include/python%%XYDOT%%%%ABI%%/cpython/floatobject.h +include/python%%XYDOT%%%%ABI%%/cpython/frameobject.h +include/python%%XYDOT%%%%ABI%%/cpython/funcobject.h +include/python%%XYDOT%%%%ABI%%/cpython/genobject.h +include/python%%XYDOT%%%%ABI%%/cpython/import.h +include/python%%XYDOT%%%%ABI%%/cpython/initconfig.h +include/python%%XYDOT%%%%ABI%%/cpython/listobject.h +include/python%%XYDOT%%%%ABI%%/cpython/lock.h +include/python%%XYDOT%%%%ABI%%/cpython/longintrepr.h +include/python%%XYDOT%%%%ABI%%/cpython/longobject.h +include/python%%XYDOT%%%%ABI%%/cpython/memoryobject.h +include/python%%XYDOT%%%%ABI%%/cpython/methodobject.h +include/python%%XYDOT%%%%ABI%%/cpython/modsupport.h +include/python%%XYDOT%%%%ABI%%/cpython/monitoring.h +include/python%%XYDOT%%%%ABI%%/cpython/object.h +include/python%%XYDOT%%%%ABI%%/cpython/objimpl.h +include/python%%XYDOT%%%%ABI%%/cpython/odictobject.h +include/python%%XYDOT%%%%ABI%%/cpython/picklebufobject.h +include/python%%XYDOT%%%%ABI%%/cpython/pthread_stubs.h +include/python%%XYDOT%%%%ABI%%/cpython/pyatomic.h +include/python%%XYDOT%%%%ABI%%/cpython/pyatomic_gcc.h +include/python%%XYDOT%%%%ABI%%/cpython/pyatomic_msc.h +include/python%%XYDOT%%%%ABI%%/cpython/pyatomic_std.h +include/python%%XYDOT%%%%ABI%%/cpython/pyctype.h +include/python%%XYDOT%%%%ABI%%/cpython/pydebug.h +include/python%%XYDOT%%%%ABI%%/cpython/pyerrors.h +include/python%%XYDOT%%%%ABI%%/cpython/pyfpe.h +include/python%%XYDOT%%%%ABI%%/cpython/pyframe.h +include/python%%XYDOT%%%%ABI%%/cpython/pyhash.h +include/python%%XYDOT%%%%ABI%%/cpython/pylifecycle.h +include/python%%XYDOT%%%%ABI%%/cpython/pymem.h +include/python%%XYDOT%%%%ABI%%/cpython/pystate.h +include/python%%XYDOT%%%%ABI%%/cpython/pystats.h +include/python%%XYDOT%%%%ABI%%/cpython/pythonrun.h +include/python%%XYDOT%%%%ABI%%/cpython/pythread.h +include/python%%XYDOT%%%%ABI%%/cpython/pytime.h +include/python%%XYDOT%%%%ABI%%/cpython/setobject.h +include/python%%XYDOT%%%%ABI%%/cpython/traceback.h +include/python%%XYDOT%%%%ABI%%/cpython/tracemalloc.h +include/python%%XYDOT%%%%ABI%%/cpython/tupleobject.h +include/python%%XYDOT%%%%ABI%%/cpython/unicodeobject.h +include/python%%XYDOT%%%%ABI%%/cpython/warnings.h +include/python%%XYDOT%%%%ABI%%/cpython/weakrefobject.h +include/python%%XYDOT%%%%ABI%%/critical_section.h +include/python%%XYDOT%%%%ABI%%/datetime.h +include/python%%XYDOT%%%%ABI%%/descrobject.h +include/python%%XYDOT%%%%ABI%%/dictobject.h +include/python%%XYDOT%%%%ABI%%/dynamic_annotations.h +include/python%%XYDOT%%%%ABI%%/enumobject.h +include/python%%XYDOT%%%%ABI%%/errcode.h +include/python%%XYDOT%%%%ABI%%/exports.h +include/python%%XYDOT%%%%ABI%%/fileobject.h +include/python%%XYDOT%%%%ABI%%/fileutils.h +include/python%%XYDOT%%%%ABI%%/floatobject.h +include/python%%XYDOT%%%%ABI%%/frameobject.h +include/python%%XYDOT%%%%ABI%%/genericaliasobject.h +include/python%%XYDOT%%%%ABI%%/import.h +include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc.h +include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/atomic.h +include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/internal.h +include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/prim.h +include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/track.h +include/python%%XYDOT%%%%ABI%%/internal/mimalloc/mimalloc/types.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_abstract.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_asdl.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_ast.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_ast_state.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_atexit.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_audit.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_backoff.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_bitutils.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_blocks_output_buffer.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_brc.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_bytes_methods.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_bytesobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_c_array.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_call.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_capsule.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_cell.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_ceval.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_ceval_state.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_code.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_codecs.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_compile.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_complexobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_condvar.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_context.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_critical_section.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_crossinterp.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_crossinterp_data_registry.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_debug_offsets.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_descrobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_dict.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_dict_state.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_dtoa.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_emscripten_signal.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_emscripten_trampoline.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_exceptions.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_faulthandler.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_fileutils.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_fileutils_windows.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_floatobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_flowgraph.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_format.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_frame.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_freelist.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_freelist_state.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_function.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_gc.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_genobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_getopt.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_gil.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_global_objects.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_global_objects_fini_generated.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_global_strings.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_hamt.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_hashtable.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_import.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_importdl.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_index_pool.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_initconfig.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_instruction_sequence.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_instruments.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_interp.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_interp_structs.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_interpframe.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_interpframe_structs.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_interpolation.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_intrinsics.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_jit.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_list.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_llist.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_lock.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_long.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_magic_number.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_mimalloc.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_memoryobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_modsupport.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_moduleobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_namespace.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_object.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_object_alloc.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_object_deferred.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_object_stack.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_object_state.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_obmalloc.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_obmalloc_init.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_opcode_metadata.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_opcode_utils.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_optimizer.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_parking_lot.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_parser.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pathconfig.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pyarena.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pyatomic_ft_wrappers.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pybuffer.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pyerrors.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pyhash.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pylifecycle.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pymath.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pymem.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pymem_init.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pystate.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pystats.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pythonrun.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_pythread.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_qsbr.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_range.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime_structs.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime_init.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_runtime_init_generated.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_semaphore.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_setobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_signal.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_sliceobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_stackref.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_stats.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_strhex.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_structs.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_structseq.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_symtable.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_sysmodule.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_template.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_time.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_typedefs.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_token.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_traceback.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_tracemalloc.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_tstate.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_tuple.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_typeobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_typevarobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_ucnhash.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_unicodeobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_unicodeobject_generated.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_unionobject.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_uniqueid.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_uop_ids.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_uop_metadata.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_warnings.h +include/python%%XYDOT%%%%ABI%%/internal/pycore_weakref.h +include/python%%XYDOT%%%%ABI%%/intrcheck.h +include/python%%XYDOT%%%%ABI%%/iterobject.h +include/python%%XYDOT%%%%ABI%%/listobject.h +include/python%%XYDOT%%%%ABI%%/lock.h +include/python%%XYDOT%%%%ABI%%/longobject.h +include/python%%XYDOT%%%%ABI%%/marshal.h +include/python%%XYDOT%%%%ABI%%/memoryobject.h *** 8076 LINES SKIPPED ***home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ffaf2e.32ccc.5b3dafbb>
