Commit 568867a6 authored by Benjamin Peterson's avatar Benjamin Peterson

check for NULL tp_as_mapping in PySequence_(Get/Set/Del)Slice #9834

parent e861598d
...@@ -108,6 +108,13 @@ Library ...@@ -108,6 +108,13 @@ Library
guaranteed to exist in all Python implementations and the names of hash guaranteed to exist in all Python implementations and the names of hash
algorithms available in the current process. algorithms available in the current process.
C-API
-----
- Issue #9834: Don't segfault in PySequence_GetSlice, PySequence_SetSlice, or
PySequence_DelSlice when the object doesn't have any mapping operations
defined.
Tools/Demos Tools/Demos
----------- -----------
......
...@@ -1612,7 +1612,7 @@ PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2) ...@@ -1612,7 +1612,7 @@ PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
if (!s) return null_error(); if (!s) return null_error();
mp = s->ob_type->tp_as_mapping; mp = s->ob_type->tp_as_mapping;
if (mp->mp_subscript) { if (mp && mp->mp_subscript) {
PyObject *res; PyObject *res;
PyObject *slice = _PySlice_FromIndices(i1, i2); PyObject *slice = _PySlice_FromIndices(i1, i2);
if (!slice) if (!slice)
...@@ -1690,7 +1690,7 @@ PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o) ...@@ -1690,7 +1690,7 @@ PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
} }
mp = s->ob_type->tp_as_mapping; mp = s->ob_type->tp_as_mapping;
if (mp->mp_ass_subscript) { if (mp && mp->mp_ass_subscript) {
int res; int res;
PyObject *slice = _PySlice_FromIndices(i1, i2); PyObject *slice = _PySlice_FromIndices(i1, i2);
if (!slice) if (!slice)
...@@ -1715,7 +1715,7 @@ PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2) ...@@ -1715,7 +1715,7 @@ PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
} }
mp = s->ob_type->tp_as_mapping; mp = s->ob_type->tp_as_mapping;
if (mp->mp_ass_subscript) { if (mp && mp->mp_ass_subscript) {
int res; int res;
PyObject *slice = _PySlice_FromIndices(i1, i2); PyObject *slice = _PySlice_FromIndices(i1, i2);
if (!slice) if (!slice)
......
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