[Python-checkins] GH-100342: check for allocation failure in AC `*args` parsing (#100343)

kumaraditya303 webhook-mailer at python.org
Tue Dec 27 23:16:34 EST 2022


https://github.com/python/cpython/commit/7cf164ad5e3c8c6af5ae8813ad6a784448605418
commit: 7cf164ad5e3c8c6af5ae8813ad6a784448605418
branch: main
author: Kumar Aditya <59607654+kumaraditya303 at users.noreply.github.com>
committer: kumaraditya303 <59607654+kumaraditya303 at users.noreply.github.com>
date: 2022年12月28日T09:46:28+05:30
summary:
GH-100342: check for allocation failure in AC `*args` parsing (#100343)
files:
A Misc/NEWS.d/next/Tools-Demos/2022-12-19-10-08-53.gh-issue-100342.qDFlQG.rst
M Lib/test/clinic.test
M Modules/clinic/_testclinic.c.h
M Tools/clinic/clinic.py
diff --git a/Lib/test/clinic.test b/Lib/test/clinic.test
index 0d844234d9d1..53e5df5ba872 100644
--- a/Lib/test/clinic.test
+++ b/Lib/test/clinic.test
@@ -3781,6 +3781,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]));
 }
@@ -3793,7 +3796,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
index 000000000000..28f736337526
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2022-12-19-10-08-53.gh-issue-100342.qDFlQG.rst
@@ -0,0 +1 @@
+Add missing ``NULL`` check for possible allocation failure in ``*args`` parsing in Argument Clinic.
diff --git a/Modules/clinic/_testclinic.c.h b/Modules/clinic/_testclinic.c.h
index 21bde5294702..831f58ca650a 100644
--- a/Modules/clinic/_testclinic.c.h
+++ b/Modules/clinic/_testclinic.c.h
@@ -2409,6 +2409,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]));
 }
@@ -2769,6 +2772,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]));
 }
@@ -2811,4 +2817,4 @@ gh_99240_double_free(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 exit:
 return return_value;
 }
-/*[clinic end generated code: output=9a5ca5909c087102 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=e8211606b03d733a input=a9049054013a1b77]*/
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 2fb1902a5b54..552ed2c889a7 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -960,12 +960,16 @@ def parser_body(prototype, *fields, declarations=''):
 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


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /