]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] GH-100342: check for allocation failure in AC `*args` parsing (GH-100343)...
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Wed, 28 Dec 2022 04:41:27 +0000 (10:11 +0530)
committerGitHub <noreply@github.com>
Wed, 28 Dec 2022 04:41:27 +0000 (10:11 +0530)
(cherry picked from commit 7cf164ad5e3c8c6af5ae8813ad6a784448605418)

Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Lib/test/clinic.test
Misc/NEWS.d/next/Tools-Demos/2022-12-19-10-08-53.gh-issue-100342.qDFlQG.rst [new file with mode: 0644]
Modules/clinic/_testclinic.c.h
Tools/clinic/clinic.py

index 217aa4c7e97a685ff91fd09cf2244199d8ac517f..0abadbe7f3474e21b7b03912351dc83edf5905cc 100644 (file)
@@ -3327,6 +3327,9 @@ test_vararg_and_posonly(PyObject *module, PyObject *const *args, Py_ssize_t narg
     }
     a = args[0];
     __clinic_args = PyTuple_New(nargs - 1);
+    if (!__clinic_args) {
+        goto exit;
+    }
     for (Py_ssize_t i = 0; i < nargs - 1; ++i) {
         PyTuple_SET_ITEM(__clinic_args, i, Py_NewRef(args[1 + i]));
     }
@@ -3339,7 +3342,7 @@ exit:
 
 static PyObject *
 test_vararg_and_posonly_impl(PyObject *module, PyObject *a, PyObject *args)
-/*[clinic end generated code: output=081a953b8cbe7617 input=08dc2bf7afbf1613]*/
+/*[clinic end generated code: output=79b75dc07decc8d6 input=08dc2bf7afbf1613]*/
 
 /*[clinic input]
 test_vararg
diff --git a/Misc/NEWS.d/next/Tools-Demos/2022-12-19-10-08-53.gh-issue-100342.qDFlQG.rst b/Misc/NEWS.d/next/Tools-Demos/2022-12-19-10-08-53.gh-issue-100342.qDFlQG.rst
new file mode 100644 (file)
index 0000000..28f7363
--- /dev/null
@@ -0,0 +1 @@
+Add missing ``NULL`` check for possible allocation failure in ``*args`` parsing in Argument Clinic.
index 41555d801059d4012e0670dd6614ac94543031b9..c97ac1c66296072fae5ba293c0c45e6efd273c29 100644 (file)
@@ -2012,6 +2012,9 @@ vararg_and_posonly(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     }
     a = args[0];
     __clinic_args = PyTuple_New(nargs - 1);
+    if (!__clinic_args) {
+        goto exit;
+    }
     for (Py_ssize_t i = 0; i < nargs - 1; ++i) {
         PyTuple_SET_ITEM(__clinic_args, i, Py_NewRef(args[1 + i]));
     }
@@ -2257,6 +2260,9 @@ gh_99233_refcount(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
         goto exit;
     }
     __clinic_args = PyTuple_New(nargs - 0);
+    if (!__clinic_args) {
+        goto exit;
+    }
     for (Py_ssize_t i = 0; i < nargs - 0; ++i) {
         PyTuple_SET_ITEM(__clinic_args, i, Py_NewRef(args[0 + i]));
     }
@@ -2299,4 +2305,4 @@ gh_99240_double_free(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=fe398ac790310bc4 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=6b719efc1b8bd2c8 input=a9049054013a1b77]*/
index a6d8b86a83cef033f28b3396b9721bd323ab4ece..82e4919242c710d2438ccbdf1f4a2b8302b139f3 100755 (executable)
@@ -903,12 +903,16 @@ class CLanguage(Language):
                     if not new_or_init:
                         parser_code.append(normalize_snippet("""
                             %s = PyTuple_New(%s);
+                            if (!%s) {{
+                                goto exit;
+                            }}
                             for (Py_ssize_t i = 0; i < %s; ++i) {{
                                 PyTuple_SET_ITEM(%s, i, Py_NewRef(args[%d + i]));
                             }}
                             """ % (
                                 p.converter.parser_name,
                                 left_args,
+                                p.converter.parser_name,
                                 left_args,
                                 p.converter.parser_name,
                                 max_pos