summaryrefslogtreecommitdiffstats
path: root/Modules/_testclinic.c
diff options
context:
space:
mode:
authorcolorfulappl <colorfulappl@qq.com>2022-11-24 19:56:50 (GMT)
committerGitHub <noreply@github.com>2022-11-24 19:56:50 (GMT)
commit0da728387c99fe6c127b070f2d250dc5bdd62ee5 (patch)
treed160fe884cbaacdeb17c72e8fc8b8d23cec249dd /Modules/_testclinic.c
parent351842b46a7cb3c3f23b200d532cf29e4557ad4b (diff)
downloadcpython-0da728387c99fe6c127b070f2d250dc5bdd62ee5.zip
cpython-0da728387c99fe6c127b070f2d250dc5bdd62ee5.tar.gz
cpython-0da728387c99fe6c127b070f2d250dc5bdd62ee5.tar.bz2
gh-64490: Fix bugs in argument clinic varargs processing (#32092)
Diffstat (limited to 'Modules/_testclinic.c')
-rw-r--r--Modules/_testclinic.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/Modules/_testclinic.c b/Modules/_testclinic.c
index 56eddfd..91fdee2 100644
--- a/Modules/_testclinic.c
+++ b/Modules/_testclinic.c
@@ -951,6 +951,25 @@ keyword_only_parameter_impl(PyObject *module, PyObject *a)
/*[clinic input]
+posonly_vararg
+
+ a: object
+ /
+ b: object
+ *args: object
+
+[clinic start generated code]*/
+
+static PyObject *
+posonly_vararg_impl(PyObject *module, PyObject *a, PyObject *b,
+ PyObject *args)
+/*[clinic end generated code: output=ee6713acda6b954e input=783427fe7ec2b67a]*/
+{
+ return pack_arguments_newref(3, a, b, args);
+}
+
+
+/*[clinic input]
vararg_and_posonly
a: object
@@ -968,6 +987,100 @@ vararg_and_posonly_impl(PyObject *module, PyObject *a, PyObject *args)
/*[clinic input]
+vararg
+
+ a: object
+ *args: object
+
+[clinic start generated code]*/
+
+static PyObject *
+vararg_impl(PyObject *module, PyObject *a, PyObject *args)
+/*[clinic end generated code: output=91ab7a0efc52dd5e input=02c0f772d05f591e]*/
+{
+ return pack_arguments_newref(2, a, args);
+}
+
+
+/*[clinic input]
+vararg_with_default
+
+ a: object
+ *args: object
+ b: bool = False
+
+[clinic start generated code]*/
+
+static PyObject *
+vararg_with_default_impl(PyObject *module, PyObject *a, PyObject *args,
+ int b)
+/*[clinic end generated code: output=182c01035958ce92 input=68cafa6a79f89e36]*/
+{
+ PyObject *obj_b = b ? Py_True : Py_False;
+ return pack_arguments_newref(3, a, args, obj_b);
+}
+
+
+/*[clinic input]
+vararg_with_only_defaults
+
+ *args: object
+ b: object = None
+
+[clinic start generated code]*/
+
+static PyObject *
+vararg_with_only_defaults_impl(PyObject *module, PyObject *args, PyObject *b)
+/*[clinic end generated code: output=c06b1826d91f2f7b input=678c069bc67550e1]*/
+{
+ return pack_arguments_newref(2, args, b);
+}
+
+
+
+/*[clinic input]
+gh_32092_oob
+
+ pos1: object
+ pos2: object
+ *varargs: object
+ kw1: object = None
+ kw2: object = None
+
+Proof-of-concept of GH-32092 OOB bug.
+
+[clinic start generated code]*/
+
+static PyObject *
+gh_32092_oob_impl(PyObject *module, PyObject *pos1, PyObject *pos2,
+ PyObject *varargs, PyObject *kw1, PyObject *kw2)
+/*[clinic end generated code: output=ee259c130054653f input=46d15c881608f8ff]*/
+{
+ Py_RETURN_NONE;
+}
+
+
+/*[clinic input]
+gh_32092_kw_pass
+
+ pos: object
+ *args: object
+ kw: object = None
+
+Proof-of-concept of GH-32092 keyword args passing bug.
+
+[clinic start generated code]*/
+
+static PyObject *
+gh_32092_kw_pass_impl(PyObject *module, PyObject *pos, PyObject *args,
+ PyObject *kw)
+/*[clinic end generated code: output=4a2bbe4f7c8604e9 input=5c0bd5b9079a0cce]*/
+{
+ Py_RETURN_NONE;
+}
+
+
+/*[clinic input]
gh_99233_refcount
*args: object
@@ -1046,7 +1159,13 @@ static PyMethodDef tester_methods[] = {
POSONLY_KEYWORDS_OPT_KWONLY_OPT_METHODDEF
POSONLY_OPT_KEYWORDS_OPT_KWONLY_OPT_METHODDEF
KEYWORD_ONLY_PARAMETER_METHODDEF
+ POSONLY_VARARG_METHODDEF
VARARG_AND_POSONLY_METHODDEF
+ VARARG_METHODDEF
+ VARARG_WITH_DEFAULT_METHODDEF
+ VARARG_WITH_ONLY_DEFAULTS_METHODDEF
+ GH_32092_OOB_METHODDEF
+ GH_32092_KW_PASS_METHODDEF
GH_99233_REFCOUNT_METHODDEF
GH_99240_DOUBLE_FREE_METHODDEF
{NULL, NULL}