Skip to content

Commit f09ea12

Browse files
committed
Fixing custom xrange for negative steps
1 parent 800e6f0 commit f09ea12

3 files changed

Lines changed: 22 additions & 7 deletions

File tree

data/txt/sha256sums.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ c03dc585f89642cfd81b087ac2723e3e1bb3bfa8c60e6f5fe58ef3b0113ebfe6 lib/core/data.
188188
48797d6c34dd9bb8a53f7f3794c85f4288d82a9a1d6be7fcf317d388cb20d4b3 lib/core/replication.py
189189
0b8c38a01bb01f843d94a6c5f2075ee47520d0c4aa799cecea9c3e2c5a4a23a6 lib/core/revision.py
190190
888daba83fd4a34e9503fe21f01fef4cc730e5cde871b1d40e15d4cbc847d56c lib/core/session.py
191-
118f716132dc29f5fb5692d30948f2d73295fc2638571abc5711bcfeaa7f4a0e lib/core/settings.py
191+
b93b225a22ec3f11f2b37823f5ee7c4ed76b67cac9bebc4a2e62e1ae1a2538db lib/core/settings.py
192192
cd5a66deee8963ba8e7e9af3dd36eb5e8127d4d68698811c29e789655f507f82 lib/core/shell.py
193193
bcb5d8090d5e3e0ef2a586ba09ba80eef0c6d51feb0f611ed25299fbb254f725 lib/core/subprocessng.py
194194
70ea3768f1b3062b22d20644df41c86238157ec80dd43da40545c620714273c6 lib/core/target.py
@@ -261,7 +261,7 @@ de4be7e291db0962cd59f9c04b3f7259f846e315df1fd9b323954f89fae0b2db lib/utils/sear
261261
f0e5525a92fe971defc8f74c27942ff9138b1e8251f2e0d9a8bd59285b656084 lib/utils/timeout.py
262262
f821dc39a75ea48dccfa758788de15d38b9ca6a780a98f59935fb6610f75508c lib/utils/tui.py
263263
e430db49aa768ff2cdba76932e30871c366054599c44d91580dde459ab9b6fef lib/utils/versioncheck.py
264-
b6cd3059c369bbcb162cfd797596849f9f95078c3b2e91fecee36d3ea1001fc2 lib/utils/xrange.py
264+
1b439fc59fd202c21c74978ed9f36d1c309533226c77907eae159461525f9fef lib/utils/xrange.py
265265
b1bbb62f5b272a6247d442d5e4f644a5bca7138e70776539ec84a5a90433fd13 LICENSE
266266
6b1828a80ae3472f1adb53a540dee0835eccac14f8cfc4bf73962c4e49a49557 plugins/dbms/access/connector.py
267267
c18939660aebb5ce323b4c78a46a2b119869ba8d0b44c853924118936ce5b0ac plugins/dbms/access/enumeration.py

lib/core/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from thirdparty import six
2121

2222
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
23-
VERSION = "1.10.6.93"
23+
VERSION = "1.10.6.94"
2424
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
2525
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
2626
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)

lib/utils/xrange.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,21 @@ class xrange(object):
2626
True
2727
>>> list(xrange(0, 7, 2)) == list(range(0, 7, 2))
2828
True
29+
>>> list(xrange(8, 0, -2)) == list(range(8, 0, -2))
30+
True
2931
>>> foobar = xrange(1, 10)
3032
>>> 7 in foobar
3133
True
3234
>>> 11 in foobar
3335
False
3436
>>> foobar[0]
3537
1
38+
>>> 6 in xrange(8, 0, -2)
39+
True
40+
>>> 0 in xrange(8, 0, -2)
41+
False
42+
>>> xrange(0, 10, 2).index(4)
43+
2
3644
"""
3745

3846
__slots__ = ['_slice']
@@ -71,10 +79,17 @@ def __len__(self):
7179
return self._len()
7280

7381
def _len(self):
74-
return max(0, 1 + int((self.stop - 1 - self.start) // self.step))
82+
if self.step > 0:
83+
lo, hi, step = self.start, self.stop, self.step
84+
else: # Note: normalizing for descending ranges (negative step)
85+
lo, hi, step = self.stop, self.start, -self.step
86+
return max(0, (hi - lo + step - 1) // step)
7587

7688
def __contains__(self, value):
77-
return (self.start <= value < self.stop) and (value - self.start) % self.step == 0
89+
if self.step > 0:
90+
return self.start <= value < self.stop and (value - self.start) % self.step == 0
91+
else:
92+
return self.stop < value <= self.start and (value - self.start) % self.step == 0
7893

7994
def __getitem__(self, index):
8095
if isinstance(index, slice):
@@ -98,7 +113,7 @@ def _index(self, i):
98113
return self.start + self.step * i
99114

100115
def index(self, i):
101-
if self.start <= i < self.stop:
102-
return i - self.start
116+
if i in self:
117+
return (i - self.start) // self.step # Note: also accounts for step != 1 (and descending ranges)
103118
else:
104119
raise ValueError("%d is not in list" % i)

0 commit comments

Comments
 (0)