summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkj <28750310+Fidget-Spinner@users.noreply.github.com>2020-12-05 16:02:14 (GMT)
committerGitHub <noreply@github.com>2020-12-05 16:02:14 (GMT)
commit804d6893b801e8f30318afc38c20d4d0e6161db3 (patch)
tree54ab5cd365ec99fa0cd95cb690bb9ef3d02f9658
parentda3d2abe6be9fcf18cac12ec5d7d9f1180d94b5e (diff)
downloadcpython-804d6893b801e8f30318afc38c20d4d0e6161db3.zip
cpython-804d6893b801e8f30318afc38c20d4d0e6161db3.tar.gz
cpython-804d6893b801e8f30318afc38c20d4d0e6161db3.tar.bz2
bpo-42576: Raise TypeError when passing in keyword arguments to GenericAlias (GH-23656)
Use `_PyArg_NoKeywords` instead of `_PyArg_NoKwnames` when checking the `kwds` tuple when creating `GenericAlias`. This fixes an interpreter crash when passing in keyword arguments to `GenericAlias`'s constructor. Needs backport to 3.9. Automerge-Triggered-By: GH:gvanrossum
-rw-r--r--Lib/test/test_genericalias.py5
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2020-12-05-22-34-47.bpo-42576.lEeEl7.rst3
-rw-r--r--Objects/genericaliasobject.c2
3 files changed, 9 insertions, 1 deletions
diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py
index 912fb33..c113e53 100644
--- a/Lib/test/test_genericalias.py
+++ b/Lib/test/test_genericalias.py
@@ -302,6 +302,11 @@ class BaseTest(unittest.TestCase):
alias = t[int]
self.assertEqual(ref(alias)(), alias)
+ def test_no_kwargs(self):
+ # bpo-42576
+ with self.assertRaises(TypeError):
+ GenericAlias(bad=float)
+
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-12-05-22-34-47.bpo-42576.lEeEl7.rst b/Misc/NEWS.d/next/Core and Builtins/2020-12-05-22-34-47.bpo-42576.lEeEl7.rst
new file mode 100644
index 0000000..7290b47
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-12-05-22-34-47.bpo-42576.lEeEl7.rst
@@ -0,0 +1,3 @@
+``types.GenericAlias`` will now raise a ``TypeError`` when attempting to
+initialize with a keyword argument. Previously, this would cause the
+interpreter to crash. Patch by Ken Jin.
diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c
index 6102e05..51a1237 100644
--- a/Objects/genericaliasobject.c
+++ b/Objects/genericaliasobject.c
@@ -567,7 +567,7 @@ static PyGetSetDef ga_properties[] = {
static PyObject *
ga_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
- if (!_PyArg_NoKwnames("GenericAlias", kwds)) {
+ if (!_PyArg_NoKeywords("GenericAlias", kwds)) {
return NULL;
}
if (!_PyArg_CheckPositional("GenericAlias", PyTuple_GET_SIZE(args), 2, 2)) {