Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
f00bb03
Support functional test for Argument Clinic
colorfulappl Aug 22, 2022
a59e304
📜🤖 Added by blurb_it.
blurb-it[bot] Aug 22, 2022
2bd331e
Revert "Support functional test for Argument Clinic"
colorfulappl Aug 23, 2022
fac5b77
Add functional test for Argument Clinic
colorfulappl Aug 23, 2022
962434c
Add testcases written in C
colorfulappl Aug 23, 2022
b93b2ae
Rename _testclinicfunctionality.c to _testclinic.c
colorfulappl Oct 25, 2022
35c5f13
Add _testclinic to stdlib IGNORE list
colorfulappl Oct 25, 2022
86703de
Merge TestClinicFunctionalityC class into TestClinicFunctionality
colorfulappl Oct 25, 2022
e66d60b
Format code in _testclinic.c
colorfulappl Oct 25, 2022
f1fb377
Merge test_clinic_functionality.py into test_clinic.py
colorfulappl Oct 26, 2022
449c8fe
Simplify testcases
colorfulappl Oct 26, 2022
1553574
Merge branch 'main' into test_clinic_functionality
colorfulappl Oct 26, 2022
81fe77b
Add more testcases
colorfulappl Oct 28, 2022
7c269d0
Rename class TestClinicFunctionality to ClinicFunctionalTest
colorfulappl Nov 1, 2022
a3a3455
Fix UB problem
colorfulappl Nov 2, 2022
80ba71a
Fix refleaks
colorfulappl Nov 4, 2022
cf77785
Clean code
colorfulappl Nov 4, 2022
10ce3c7
Add PoC of GH-99233
colorfulappl Nov 8, 2022
2cc6c0a
Add PoC of GH-99240
colorfulappl Nov 8, 2022
6a2d334
Delete test cases which fail this test
colorfulappl Nov 10, 2022
d82ef72
Merge branch 'main' into test_clinic_functionality
colorfulappl Nov 10, 2022
b27b43d
Rerun `make regen-all`
colorfulappl Nov 10, 2022
1cae160
Fix leaking
colorfulappl Nov 13, 2022
fb6d3be
Fix code style
colorfulappl Nov 13, 2022
fd1ed14
Merge branch 'main' into test_clinic_functionality
colorfulappl Nov 13, 2022
e82c88a
Rerun `make regen-all`
colorfulappl Nov 13, 2022
598568c
Fix object leaking and code style
colorfulappl Nov 14, 2022
dd43f24
Change argument release order
colorfulappl Nov 14, 2022
325e35b
Rename macro
colorfulappl Nov 14, 2022
967dda6
Update news
colorfulappl Nov 14, 2022
d568683
Fix object leaking
colorfulappl Nov 14, 2022
ce337e8
Remove unnecessary logic
colorfulappl Nov 15, 2022
3314465
Merge branch 'main' into test_clinic_functionality
colorfulappl Nov 15, 2022
68277c5
Merge branch 'main' into test_clinic_functionality
colorfulappl Nov 15, 2022
da0789f
Merge branch 'main' into test_clinic_functionality
colorfulappl Nov 17, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Support functional test for Argument Clinic
  • Loading branch information
colorfulappl committed Aug 23, 2022
commit f00bb03be775538203f3ee643a17fdb50fe8565f
1 change: 1 addition & 0 deletions Lib/test/test_clinic_functionality/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .test_clinic_functionality import *
3 changes: 3 additions & 0 deletions Lib/test/test_clinic_functionality/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import unittest

unittest.main('test.test_clinic_functionality')

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions Lib/test/test_clinic_functionality/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from setuptools import setup, Extension
from test import support


def main():
SOURCE = support.findfile('test_clinic_functionality.c', subdir='test_clinic_functionality')
module = Extension('test_clinic_functionality', sources=[SOURCE])
setup(name='test_clinic_functionality', version='0.0', ext_modules=[module])


if __name__ == '__main__':
main()
97 changes: 97 additions & 0 deletions Lib/test/test_clinic_functionality/test_clinic_functionality.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "clinic/test_clinic_functionality.c.h"


/*[clinic input]
module clinic_functional_tester
[clinic start generated code]*/
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=2ee8b0b242501b11]*/

/*[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.

Array index out-of-bound bug in function
`_PyArg_UnpackKeywordsWithVararg` .

Calling this function by gh_32092_oob(1, 2, 3, 4, kw1=5, kw2=6)
to trigger this bug (crash).
Expected return: (1, 2, (3, 4), 5, 6)

[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=91d8e227acf93b02]*/
{
PyObject *tuple = PyTuple_New(5);;
PyTuple_SET_ITEM(tuple, 0, Py_NewRef(pos1));
PyTuple_SET_ITEM(tuple, 1, Py_NewRef(pos2));
PyTuple_SET_ITEM(tuple, 2, Py_NewRef(varargs));
PyTuple_SET_ITEM(tuple, 3, Py_NewRef(kw1));
PyTuple_SET_ITEM(tuple, 4, Py_NewRef(kw2));
return tuple;
}

/*[clinic input]
gh_32092_kw_pass

pos: object
*args: object
kw: object = None

Proof-of-concept of GH-32092 keyword args passing bug.

The calculation of `noptargs` in AC-generated function
`builtin_kw_pass_poc` is incorrect.

Calling this function by gh_32092_kw_pass(1, 2, 3)
to trigger this bug (crash).
Expected return: (1, (2, 3))

[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=c51b7572ac09f193]*/
{
PyObject *tuple = PyTuple_New(3);;
PyTuple_SET_ITEM(tuple, 0, Py_NewRef(pos));
PyTuple_SET_ITEM(tuple, 1, Py_NewRef(args));
PyTuple_SET_ITEM(tuple, 2, Py_NewRef(kw));
return tuple;
}

static PyMethodDef tester_methods[] = {
GH_32092_OOB_METHODDEF
GH_32092_KW_PASS_METHODDEF
{NULL, NULL}
};

static struct PyModuleDef clinic_functional_tester_module = {
PyModuleDef_HEAD_INIT,
"clinic_functional_tester",
NULL,
0,
tester_methods,
NULL,
NULL,
NULL,
NULL
};

PyMODINIT_FUNC
PyInit_test_clinic_functionality(void)
{
return PyModule_Create(&clinic_functional_tester_module);
}
Loading