mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
Patch #1674228: when assigning a slice (old-style), check for the
sq_ass_slice instead of the sq_slice slot.
This commit is contained in:
parent
ca90ca81a4
commit
0fca97a5fb
3 changed files with 18 additions and 1 deletions
|
@ -4206,6 +4206,19 @@ def notimplemented():
|
||||||
check(iexpr, c, N1)
|
check(iexpr, c, N1)
|
||||||
check(iexpr, c, N2)
|
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():
|
def test_main():
|
||||||
weakref_segfault() # Must be first, somehow
|
weakref_segfault() # Must be first, somehow
|
||||||
wrapper_segfault()
|
wrapper_segfault()
|
||||||
|
@ -4301,6 +4314,7 @@ def test_main():
|
||||||
test_init()
|
test_init()
|
||||||
methodwrapper()
|
methodwrapper()
|
||||||
notimplemented()
|
notimplemented()
|
||||||
|
test_assign_slice()
|
||||||
|
|
||||||
from test import test_descr
|
from test import test_descr
|
||||||
run_doctest(test_descr, verbosity=True)
|
run_doctest(test_descr, verbosity=True)
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1?
|
||||||
Core and builtins
|
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.
|
- When printing an unraisable error, don't print exceptions. before the name.
|
||||||
This duplicates the behavior whening normally printing exceptions.
|
This duplicates the behavior whening normally printing exceptions.
|
||||||
|
|
||||||
|
|
|
@ -3927,7 +3927,7 @@ assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
|
||||||
PyTypeObject *tp = u->ob_type;
|
PyTypeObject *tp = u->ob_type;
|
||||||
PySequenceMethods *sq = tp->tp_as_sequence;
|
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;
|
Py_ssize_t ilow = 0, ihigh = PY_SSIZE_T_MAX;
|
||||||
if (!_PyEval_SliceIndex(v, &ilow))
|
if (!_PyEval_SliceIndex(v, &ilow))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue