https://github.com/python/cpython/commit/f621ba16b72510e1abc9646a844a632df4ac275c
commit: f621ba16b72510e1abc9646a844a632df4ac275c
branch: main
author: sobolevn <[email protected]>
committer: sobolevn <[email protected]>
date: 2026-05-20T16:27:55+03:00
summary:
gh-150146: Fix NULL dereference in `_Py_subs_parameters` (#150147)
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst
M Lib/test/test_genericalias.py
M Objects/genericaliasobject.c
diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py
index a5969b7a47d948..7816775620bc01 100644
--- a/Lib/test/test_genericalias.py
+++ b/Lib/test/test_genericalias.py
@@ -55,15 +55,14 @@
from unittest.case import _AssertRaisesContext
from queue import Queue, SimpleQueue
from weakref import WeakSet, ReferenceType, ref
-import typing
-from typing import Unpack
try:
from tkinter import Event
except ImportError:
Event = None
from string.templatelib import Template, Interpolation
-from typing import TypeVar
+import typing
+from typing import TypeVar, Unpack
T = TypeVar('T')
K = TypeVar('K')
V = TypeVar('V')
@@ -621,6 +620,14 @@ def test_nested_paramspec_specialization(self):
self.assertEqual(deeply_nested_specialized.__args__, ([str, [float],
int], float))
self.assertEqual(deeply_nested_specialized.__parameters__, ())
+ def test_gh150146(self):
+ # It used to crash:
+ for container in [memoryview, list, tuple]:
+ with self.subTest(container=container):
+ x = container[TypeVar("")]
+ with self.assertRaises(TypeError):
+ x[*typing.Mapping[..., ...]]
+
class TypeIterationTests(unittest.TestCase):
_UNITERABLE_TYPES = (list, tuple)
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst
new file mode 100644
index 00000000000000..f373f0bee7023e
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-20-13-06-17.gh-issue-150146.i5m_SL.rst
@@ -0,0 +1,5 @@
+Fix a crash on a complex type variable substitution.
+
+``from typing import TypeVar; memoryview[TypeVar("")][*typing.Mapping[...,
+...]]`` used to fail due to missing ``NULL`` check on ``_unpack_args`` C
+function call.
diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c
index e3bc8eb2739e3f..9c797e8dd6fd2c 100644
--- a/Objects/genericaliasobject.c
+++ b/Objects/genericaliasobject.c
@@ -412,6 +412,9 @@ _Py_subs_parameters(PyObject *self, PyObject *args,
PyObject *parameters, PyObje
self);
}
item = _unpack_args(item);
+ if (item == NULL) {
+ return NULL;
+ }
for (Py_ssize_t i = 0; i < nparams; i++) {
PyObject *param = PyTuple_GET_ITEM(parameters, i);
PyObject *prepare, *tmp;
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]