mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2024-12-01 14:03:52 +03:00
Patch for an Issue #1095
This commit is contained in:
parent
5920d16cf6
commit
2030311d50
|
@ -54,7 +54,7 @@ class BigArray(list):
|
||||||
self.chunks.pop()
|
self.chunks.pop()
|
||||||
try:
|
try:
|
||||||
with open(self.chunks[-1], "rb") as fp:
|
with open(self.chunks[-1], "rb") as fp:
|
||||||
self.chunks[-1] = pickle.load(fp)
|
self.chunks[-1] = self._load(fp)
|
||||||
except IOError, ex:
|
except IOError, ex:
|
||||||
errMsg = "exception occurred while retrieving data "
|
errMsg = "exception occurred while retrieving data "
|
||||||
errMsg += "from a temporary file ('%s')" % ex
|
errMsg += "from a temporary file ('%s')" % ex
|
||||||
|
@ -67,13 +67,35 @@ class BigArray(list):
|
||||||
return index
|
return index
|
||||||
return ValueError, "%s is not in list" % value
|
return ValueError, "%s is not in list" % value
|
||||||
|
|
||||||
def _dump(self, value):
|
def _load(self, fp):
|
||||||
|
retval = []
|
||||||
|
unpickler = pickle.Unpickler(fp)
|
||||||
|
_ = unpickler.load()
|
||||||
|
if not isinstance(_, list):
|
||||||
|
retval.append(_)
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
retval.append(unpickler.load())
|
||||||
|
except EOFError:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
retval = _
|
||||||
|
return retval
|
||||||
|
|
||||||
|
def _dump(self, chunk):
|
||||||
try:
|
try:
|
||||||
handle, filename = tempfile.mkstemp(prefix=BIGARRAY_TEMP_PREFIX)
|
handle, filename = tempfile.mkstemp(prefix=BIGARRAY_TEMP_PREFIX)
|
||||||
self.filenames.add(filename)
|
self.filenames.add(filename)
|
||||||
os.close(handle)
|
os.close(handle)
|
||||||
|
try:
|
||||||
with open(filename, "w+b") as fp:
|
with open(filename, "w+b") as fp:
|
||||||
pickle.dump(value, fp, pickle.HIGHEST_PROTOCOL)
|
pickle.dump(chunk, fp, pickle.HIGHEST_PROTOCOL)
|
||||||
|
except MemoryError:
|
||||||
|
with open(filename, "w+b") as fp:
|
||||||
|
pickler = pickle.Pickler(fp, pickle.HIGHEST_PROTOCOL)
|
||||||
|
pickler.fast = True
|
||||||
|
for value in chunk:
|
||||||
|
pickler.dump(value)
|
||||||
return filename
|
return filename
|
||||||
except IOError, ex:
|
except IOError, ex:
|
||||||
errMsg = "exception occurred while storing data "
|
errMsg = "exception occurred while storing data "
|
||||||
|
@ -87,7 +109,7 @@ class BigArray(list):
|
||||||
if not (self.cache and self.cache.index == index):
|
if not (self.cache and self.cache.index == index):
|
||||||
try:
|
try:
|
||||||
with open(self.chunks[index], "rb") as fp:
|
with open(self.chunks[index], "rb") as fp:
|
||||||
self.cache = Cache(index, pickle.load(fp), False)
|
self.cache = Cache(index, self._load(fp), False)
|
||||||
except IOError, ex:
|
except IOError, ex:
|
||||||
errMsg = "exception occurred while retrieving data "
|
errMsg = "exception occurred while retrieving data "
|
||||||
errMsg += "from a temporary file ('%s')" % ex
|
errMsg += "from a temporary file ('%s')" % ex
|
||||||
|
|
|
@ -444,7 +444,7 @@ WAF_ATTACK_VECTORS = (
|
||||||
ROTATING_CHARS = ('\\', '|', '|', '/', '-')
|
ROTATING_CHARS = ('\\', '|', '|', '/', '-')
|
||||||
|
|
||||||
# Chunk length (in items) used by BigArray objects (only last chunk and cached one are held in memory)
|
# Chunk length (in items) used by BigArray objects (only last chunk and cached one are held in memory)
|
||||||
BIGARRAY_CHUNK_LENGTH = 4096
|
BIGARRAY_CHUNK_LENGTH = 1024
|
||||||
|
|
||||||
# Prefix used for storing dumped chunks in BigArray objects
|
# Prefix used for storing dumped chunks in BigArray objects
|
||||||
BIGARRAY_TEMP_PREFIX = "sqlmapba-%d-" % os.getpid()
|
BIGARRAY_TEMP_PREFIX = "sqlmapba-%d-" % os.getpid()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user