Kaydet (Commit) a24b4d26 authored tarafından Christian Heimes's avatar Christian Heimes

Issue #18339: Negative ints keys in unpickler.memo dict no longer cause a

segfault inside the _pickle C extension.
üst 8a0b7756
......@@ -115,6 +115,13 @@ if has_c_implementation:
pickler_class = _pickle.Pickler
unpickler_class = _pickle.Unpickler
def test_issue18339(self):
unpickler = self.unpickler_class(io.BytesIO())
self.assertRaises(TypeError, setattr, unpickler, "memo", object)
# used to cause a segfault
self.assertRaises(ValueError, setattr, unpickler, "memo", {-1: None})
unpickler.memo = {1: None}
class CDispatchTableTests(AbstractDispatchTableTests):
pickler_class = pickle.Pickler
def get_dispatch_table(self):
......
......@@ -38,6 +38,9 @@ Core and Builtins
Library
-------
- Issue #18339: Negative ints keys in unpickler.memo dict no longer cause a
segfault inside the _pickle C extension.
- Issue #18224: Removed pydoc script from created venv, as it causes problems
on Windows and adds no value over and above python -m pydoc ...
......
......@@ -5931,6 +5931,11 @@ Unpickler_set_memo(UnpicklerObject *self, PyObject *obj)
idx = PyLong_AsSsize_t(key);
if (idx == -1 && PyErr_Occurred())
goto error;
if (idx < 0) {
PyErr_SetString(PyExc_ValueError,
"memos key must be positive integers.");
goto error;
}
if (_Unpickler_MemoPut(self, idx, value) < 0)
goto error;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment