[Python-checkins] r54140 - in python/branches/release25-maint: Lib/test/test_descr.py Misc/NEWS Python/ceval.c

georg.brandl python-checkins at python.org
Mon Mar 5 23:28:14 CET 2007


Author: georg.brandl
Date: Mon Mar 5 23:28:13 2007
New Revision: 54140
Modified:
 python/branches/release25-maint/Lib/test/test_descr.py
 python/branches/release25-maint/Misc/NEWS
 python/branches/release25-maint/Python/ceval.c
Log:
Patch #1674228: when assigning a slice (old-style), check for the
sq_ass_slice instead of the sq_slice slot.
 (backport from rev. 54139)
Modified: python/branches/release25-maint/Lib/test/test_descr.py
==============================================================================
--- python/branches/release25-maint/Lib/test/test_descr.py	(original)
+++ python/branches/release25-maint/Lib/test/test_descr.py	Mon Mar 5 23:28:13 2007
@@ -4143,6 +4143,19 @@
 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 @@
 test_init()
 methodwrapper()
 notimplemented()
+ test_assign_slice()
 
 if verbose: print "All OK"
 
Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS	(original)
+++ python/branches/release25-maint/Misc/NEWS	Mon Mar 5 23:28:13 2007
@@ -12,6 +12,9 @@
 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.
 
Modified: python/branches/release25-maint/Python/ceval.c
==============================================================================
--- python/branches/release25-maint/Python/ceval.c	(original)
+++ python/branches/release25-maint/Python/ceval.c	Mon Mar 5 23:28:13 2007
@@ -3926,7 +3926,7 @@
 	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;


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /