Patch #1674228: when assigning a slice (old-style), check for the
sq_ass_slice instead of the sq_slice slot. (backport from rev. 54139)
This commit is contained in:
parent
131069b3a0
commit
0ea891603d
|
@ -4143,6 +4143,19 @@ def notimplemented():
|
|||
check(iexpr, c, N1)
|
||||
check(iexpr, c, N2)
|
||||
|
||||
def test_assign_slice():
|
||||
# ceval.c's assign_slice used to check for
|
||||
# tp->tp_as_sequence->sq_slice instead of
|
||||
# tp->tp_as_sequence->sq_ass_slice
|
||||
|
||||
class C(object):
|
||||
def __setslice__(self, start, stop, value):
|
||||
self.value = value
|
||||
|
||||
c = C()
|
||||
c[1:2] = 3
|
||||
vereq(c.value, 3)
|
||||
|
||||
def test_main():
|
||||
weakref_segfault() # Must be first, somehow
|
||||
wrapper_segfault()
|
||||
|
@ -4239,6 +4252,7 @@ def test_main():
|
|||
test_init()
|
||||
methodwrapper()
|
||||
notimplemented()
|
||||
test_assign_slice()
|
||||
|
||||
if verbose: print "All OK"
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.5.1c1?
|
|||
Core and builtins
|
||||
-----------------
|
||||
|
||||
- Patch #1674228: when assigning a slice (old-style), check for the
|
||||
sq_ass_slice instead of the sq_slice slot.
|
||||
|
||||
- Bug #1669182: prevent crash when trying to print an unraisable error
|
||||
from a string exception.
|
||||
|
||||
|
|
|
@ -3926,7 +3926,7 @@ assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
|
|||
PyTypeObject *tp = u->ob_type;
|
||||
PySequenceMethods *sq = tp->tp_as_sequence;
|
||||
|
||||
if (sq && sq->sq_slice && ISINDEX(v) && ISINDEX(w)) {
|
||||
if (sq && sq->sq_ass_slice && ISINDEX(v) && ISINDEX(w)) {
|
||||
Py_ssize_t ilow = 0, ihigh = PY_SSIZE_T_MAX;
|
||||
if (!_PyEval_SliceIndex(v, &ilow))
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue