Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 45772cd

Browse files
committed
PyArg_ParseTupleAndKeywords: do basic sanity checks on the arguments,
and raise an error if they're insane. vgetargskeywords: the same, except that since this is an internal routine, just assert that the arguments are sane.
1 parent a9f4739 commit 45772cd

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

Python/getargs.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,16 @@ PyArg_ParseTupleAndKeywords(PyObject *args,
10051005
{
10061006
int retval;
10071007
va_list va;
1008-
1008+
1009+
if ((args == NULL || !PyTuple_Check(args)) ||
1010+
(keywords != NULL && !PyDict_Check(keywords)) ||
1011+
format == NULL ||
1012+
kwlist == NULL)
1013+
{
1014+
PyErr_BadInternalCall();
1015+
return -1;
1016+
}
1017+
10091018
va_start(va, kwlist);
10101019
retval = vgetargskeywords(args, keywords, format, kwlist, &va);
10111020
va_end(va);
@@ -1029,6 +1038,12 @@ vgetargskeywords(PyObject *args, PyObject *keywords, char *format,
10291038
int nkwds, pos, match, converted;
10301039
PyObject *key, *value;
10311040

1041+
assert(args != NULL && PyTuple_Check(args));
1042+
assert(keywords == NULL || PyDict_Check(keywords));
1043+
assert(format != NULL);
1044+
assert(kwlist != NULL);
1045+
assert(p_va != NULL);
1046+
10321047
/* nested tuples cannot be parsed when using keyword arguments */
10331048

10341049
for (;;) {

0 commit comments

Comments
 (0)