From: Benjamin Peterson Date: Sat, 11 Sep 2010 16:02:03 +0000 (+0000) Subject: check for NULL tp_as_mapping in PySequence_(Get/Set/Del)Slice #9834 X-Git-Tag: v3.2a3~316 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=568867a6f20c5944c0c0aba69603a4d8ff62dae6;p=thirdparty%2FPython%2Fcpython.git check for NULL tp_as_mapping in PySequence_(Get/Set/Del)Slice #9834 --- diff --git a/Misc/NEWS b/Misc/NEWS index ca64883fd1a0..225531b47147 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -108,6 +108,13 @@ Library guaranteed to exist in all Python implementations and the names of hash 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 ----------- diff --git a/Objects/abstract.c b/Objects/abstract.c index 612271da2e5d..4eb33d3bc509 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1612,7 +1612,7 @@ PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2) if (!s) return null_error(); mp = s->ob_type->tp_as_mapping; - if (mp->mp_subscript) { + if (mp && mp->mp_subscript) { PyObject *res; PyObject *slice = _PySlice_FromIndices(i1, i2); 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; - if (mp->mp_ass_subscript) { + if (mp && mp->mp_ass_subscript) { int res; PyObject *slice = _PySlice_FromIndices(i1, i2); 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; - if (mp->mp_ass_subscript) { + if (mp && mp->mp_ass_subscript) { int res; PyObject *slice = _PySlice_FromIndices(i1, i2); if (!slice)