GH-140590: Fix setstate for functools.partial C-module (GH-140671)
Co-authored-by: Mikhail Efimov <efimov.mikhail@gmail.com>
This commit is contained in:
@@ -406,6 +406,7 @@ class TestPartial:
|
||||
|
||||
def test_setstate_errors(self):
|
||||
f = self.partial(signature)
|
||||
|
||||
self.assertRaises(TypeError, f.__setstate__, (capture, (), {}))
|
||||
self.assertRaises(TypeError, f.__setstate__, (capture, (), {}, {}, None))
|
||||
self.assertRaises(TypeError, f.__setstate__, [capture, (), {}, None])
|
||||
@@ -413,6 +414,8 @@ class TestPartial:
|
||||
self.assertRaises(TypeError, f.__setstate__, (capture, None, {}, None))
|
||||
self.assertRaises(TypeError, f.__setstate__, (capture, [], {}, None))
|
||||
self.assertRaises(TypeError, f.__setstate__, (capture, (), [], None))
|
||||
self.assertRaises(TypeError, f.__setstate__, (capture, (), {}, ()))
|
||||
self.assertRaises(TypeError, f.__setstate__, (capture, (), {}, 'test'))
|
||||
|
||||
def test_setstate_subclasses(self):
|
||||
f = self.partial(signature)
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
Fix arguments checking for the :meth:`!functools.partial.__setstate__` that
|
||||
may lead to internal state corruption and crash. Patch by Sergey Miryanov.
|
||||
@@ -778,7 +778,8 @@ partial_setstate(PyObject *self, PyObject *state)
|
||||
if (!PyArg_ParseTuple(state, "OOOO", &fn, &fnargs, &kw, &dict) ||
|
||||
!PyCallable_Check(fn) ||
|
||||
!PyTuple_Check(fnargs) ||
|
||||
(kw != Py_None && !PyDict_Check(kw)))
|
||||
(kw != Py_None && !PyDict_Check(kw)) ||
|
||||
(dict != Py_None && !PyDict_Check(dict)))
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError, "invalid partial state");
|
||||
return NULL;
|
||||
|
||||
Reference in New Issue
Block a user