]> granicus.if.org Git - python/commitdiff
Fix for problem reported by Neal Norwitz. Tighten up calculation of
authorMichael W. Hudson <mwh@python.net>
Tue, 11 Jun 2002 13:38:42 +0000 (13:38 +0000)
committerMichael W. Hudson <mwh@python.net>
Tue, 11 Jun 2002 13:38:42 +0000 (13:38 +0000)
slicelength.  Include his test case.

Lib/test/test_types.py
Objects/sliceobject.c

index 8452cecdc4855cc195ef6630c80e5d1f1e906352..71e18c4bbd3daad7f29546437b2883ebb14228c0 100644 (file)
@@ -374,6 +374,8 @@ vereq(a[3::-2], [3,1])
 vereq(a[-100:100:], a)
 vereq(a[100:-100:-1], a[::-1])
 vereq(a[-100L:100L:2L], [0,2,4])
+vereq(a[1000:2000:2], [])
+vereq(a[-1000:-2000:-2], [])
 #  deletion
 del a[::2]
 vereq(a, [1,3])
index 7499d31ea6d53b2e472bb656631ab0dced955b17..9a268b715ce29a6a4c1f87aa4fcf80259344fbae 100644 (file)
@@ -151,13 +151,15 @@ PySlice_GetIndicesEx(PySliceObject *r, int length,
                if (*stop < 0) *stop = -1;
                if (*stop > length) *stop = length;
        }
-
-       if (*step < 0) {
+       
+       if ((*stop - *start)*(*step) <= 0) {
+               *slicelength = 0;
+       }
+       else if (*step < 0) {
                *slicelength = (*stop-*start+1)/(*step)+1;
        } else {
                *slicelength = (*stop-*start-1)/(*step)+1;
        }
-       if (*slicelength < 0) *slicelength = 0;
 
        return 0;
 }