From 0fca97a5fbc49f077802339c0608eb347192df6d Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 5 Mar 2007 22:28:08 +0000 Subject: Patch #1674228: when assigning a slice (old-style), check for the sq_ass_slice instead of the sq_slice slot. --- Lib/test/test_descr.py | 14 ++++++++++++++ Misc/NEWS | 3 +++ Python/ceval.c | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 208201c..1c0b366 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -4206,6 +4206,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() @@ -4301,6 +4314,7 @@ def test_main(): test_init() methodwrapper() notimplemented() + test_assign_slice() from test import test_descr run_doctest(test_descr, verbosity=True) diff --git a/Misc/NEWS b/Misc/NEWS index c59a15a..1141ecf 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- Patch #1674228: when assigning a slice (old-style), check for the + sq_ass_slice instead of the sq_slice slot. + - When printing an unraisable error, don't print exceptions. before the name. This duplicates the behavior whening normally printing exceptions. diff --git a/Python/ceval.c b/Python/ceval.c index 3a87052..63efd4e 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3927,7 +3927,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; -- cgit v0.12