time_strptime() uses PyObject_Call()

Issue #28915: Use PyObject_Call() to pass a tuple of positional arguments,
instead of relying on _PyObject_CallMethodId() weird behaviour to unpack the
tuple.
This commit is contained in:
Victor Stinner 2016-12-09 00:38:53 +01:00
parent 2b635971e7
commit dbe28d26b4
1 changed files with 13 additions and 7 deletions

View File

@ -717,16 +717,22 @@ is not present, current time as returned by localtime() is used.\n\
static PyObject *
time_strptime(PyObject *self, PyObject *args)
{
PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
PyObject *strptime_result;
PyObject *module, *func, *result;
_Py_IDENTIFIER(_strptime_time);
if (!strptime_module)
module = PyImport_ImportModuleNoBlock("_strptime");
if (!module)
return NULL;
strptime_result = _PyObject_CallMethodId(strptime_module,
&PyId__strptime_time, "O", args);
Py_DECREF(strptime_module);
return strptime_result;
func = _PyObject_GetAttrId(module, &PyId__strptime_time);
Py_DECREF(module);
if (!func) {
return NULL;
}
result = PyObject_Call(func, args, NULL);
Py_DECREF(func);
return result;
}