diff options
author | INADA Naoki <methane@users.noreply.github.com> | 2017-03-01 12:14:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-01 12:14:43 (GMT) |
commit | 023532e558bb0c5bf60195aebbafe63a0bebd85e (patch) | |
tree | 663a712ef23eb7b0ab75f540f39b989bbb1d0686 | |
parent | 1b93ed4f3ea5a4ac9786f15870e9b2812ba87cb1 (diff) | |
download | cpython-023532e558bb0c5bf60195aebbafe63a0bebd85e.zip cpython-023532e558bb0c5bf60195aebbafe63a0bebd85e.tar.gz cpython-023532e558bb0c5bf60195aebbafe63a0bebd85e.tar.bz2 |
bpo-29684: Fix minor regression of PyEval_CallObjectWithKeywords. (GH-378)
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Python/ceval.c | 13 |
2 files changed, 11 insertions, 6 deletions
@@ -10,6 +10,10 @@ What's New in Python 3.6.1 release candidate 1? Core and Builtins ----------------- +- bpo-29684: Fix minor regression of PyEval_CallObjectWithKeywords. + It should raise TypeError when kwargs is not a dict. But it might + cause segv when args=NULL and kwargs is not a dict. + - Issue #28598: Support __rmod__ for subclasses of str being called before str.__mod__. Patch by Martijn Pieters. diff --git a/Python/ceval.c b/Python/ceval.c index 8366735..02bc67e 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -4699,11 +4699,7 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *args, PyObject *kwargs) assert(!PyErr_Occurred()); #endif - if (args == NULL) { - return _PyObject_FastCallDict(func, NULL, 0, kwargs); - } - - if (!PyTuple_Check(args)) { + if (args != NULL && !PyTuple_Check(args)) { PyErr_SetString(PyExc_TypeError, "argument list must be a tuple"); return NULL; @@ -4715,7 +4711,12 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *args, PyObject *kwargs) return NULL; } - return PyObject_Call(func, args, kwargs); + if (args == NULL) { + return _PyObject_FastCallDict(func, NULL, 0, kwargs); + } + else { + return PyObject_Call(func, args, kwargs); + } } const char * |