mirror of https://github.com/python/cpython
check for NULL tp_as_mapping in PySequence_(Get/Set/Del)Slice #9834
This commit is contained in:
parent
e861598dcb
commit
568867a6f2
|
@ -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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue