[Python-checkins] gh-107609: Fix duplicate module check in Argument Clinic (#107610)

erlend-aasland webhook-mailer at python.org
Fri Aug 4 01:28:29 EDT 2023


https://github.com/python/cpython/commit/a443c310ac87f214164cb1e3f8af3f799668c867
commit: a443c310ac87f214164cb1e3f8af3f799668c867
branch: main
author: Erlend E. Aasland <erlend at python.org>
committer: erlend-aasland <erlend.aasland at protonmail.com>
date: 2023-08-04T07:28:25+02:00
summary:

gh-107609: Fix duplicate module check in Argument Clinic (#107610)

Also remove duplicate module def from _testcapi.

files:
A Misc/NEWS.d/next/Tools-Demos/2023-08-04-00-04-40.gh-issue-107609.2DqgtL.rst
M Lib/test/test_clinic.py
M Modules/_testcapi/vectorcall.c
M Tools/clinic/clinic.py

diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index 3aa41631d3637..59669d61f01bd 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -416,6 +416,16 @@ def __init__(self):
         """
         self.expect_failure(block, err, lineno=8)
 
+    def test_module_already_got_one(self):
+        err = "Already defined module 'm'!"
+        block = """
+            /*[clinic input]
+            module m
+            module m
+            [clinic start generated code]*/
+        """
+        self.expect_failure(block, err, lineno=3)
+
 
 class ClinicGroupPermuterTest(TestCase):
     def _test(self, l, m, r, output):
diff --git a/Misc/NEWS.d/next/Tools-Demos/2023-08-04-00-04-40.gh-issue-107609.2DqgtL.rst b/Misc/NEWS.d/next/Tools-Demos/2023-08-04-00-04-40.gh-issue-107609.2DqgtL.rst
new file mode 100644
index 0000000000000..080a6c15d9b8c
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2023-08-04-00-04-40.gh-issue-107609.2DqgtL.rst
@@ -0,0 +1,3 @@
+Fix duplicate module check in Argument Clinic. Previously, a duplicate
+definition would incorrectly be silently accepted. Patch by Erlend E.
+Aasland.
diff --git a/Modules/_testcapi/vectorcall.c b/Modules/_testcapi/vectorcall.c
index 61c6e0f485f47..2b5110fcba2c9 100644
--- a/Modules/_testcapi/vectorcall.c
+++ b/Modules/_testcapi/vectorcall.c
@@ -155,10 +155,9 @@ VectorCallClass_vectorcall(PyObject *callable,
 }
 
 /*[clinic input]
-module _testcapi
 class _testcapi.VectorCallClass "PyObject *" "&PyType_Type"
 [clinic start generated code]*/
-/*[clinic end generated code: output=da39a3ee5e6b4b0d input=8423a8e919f2f0df]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=95c63c1a47f9a995]*/
 
 /*[clinic input]
 _testcapi.VectorCallClass.set_vectorcall
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 733a83ee58c0f..7525c1ca52400 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -4472,7 +4472,7 @@ def directive_module(self, name: str) -> None:
         if cls:
             fail("Can't nest a module inside a class!")
 
-        if name in module.classes:
+        if name in module.modules:
             fail("Already defined module " + repr(name) + "!")
 
         m = Module(name, module)



More information about the Python-checkins mailing list