Fixing custom xrange for negative steps

This commit is contained in:
Miroslav Štampar 2026-06-12 13:04:51 +02:00
parent 800e6f0a56
commit f09ea122fb
3 changed files with 22 additions and 7 deletions

View file

@ -20,7 +20,7 @@ from lib.core.enums import OS
from thirdparty import six
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
VERSION = "1.10.6.93"
VERSION = "1.10.6.94"
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)

View file

@ -26,6 +26,8 @@ class xrange(object):
True
>>> list(xrange(0, 7, 2)) == list(range(0, 7, 2))
True
>>> list(xrange(8, 0, -2)) == list(range(8, 0, -2))
True
>>> foobar = xrange(1, 10)
>>> 7 in foobar
True
@ -33,6 +35,12 @@ class xrange(object):
False
>>> foobar[0]
1
>>> 6 in xrange(8, 0, -2)
True
>>> 0 in xrange(8, 0, -2)
False
>>> xrange(0, 10, 2).index(4)
2
"""
__slots__ = ['_slice']
@ -71,10 +79,17 @@ class xrange(object):
return self._len()
def _len(self):
return max(0, 1 + int((self.stop - 1 - self.start) // self.step))
if self.step > 0:
lo, hi, step = self.start, self.stop, self.step
else: # Note: normalizing for descending ranges (negative step)
lo, hi, step = self.stop, self.start, -self.step
return max(0, (hi - lo + step - 1) // step)
def __contains__(self, value):
return (self.start <= value < self.stop) and (value - self.start) % self.step == 0
if self.step > 0:
return self.start <= value < self.stop and (value - self.start) % self.step == 0
else:
return self.stop < value <= self.start and (value - self.start) % self.step == 0
def __getitem__(self, index):
if isinstance(index, slice):
@ -98,7 +113,7 @@ class xrange(object):
return self.start + self.step * i
def index(self, i):
if self.start <= i < self.stop:
return i - self.start
if i in self:
return (i - self.start) // self.step # Note: also accounts for step != 1 (and descending ranges)
else:
raise ValueError("%d is not in list" % i)