fix for a bug reported by Ulisses Castro (Too many open files) - also, added an important caching mechanism with thread safe logic

This commit is contained in:
Miroslav Stampar 2010-11-01 20:56:13 +00:00
parent 720e235d9a
commit 73b33ed765
4 changed files with 19 additions and 5 deletions

View File

@ -27,6 +27,9 @@ Velky Brat <velkybrat@gmail.com>
Jack Butler <fattredd@hotmail.com>
for providing me with the sqlmap site favicon
Ulisses Castro <uss.thebug@gmail.com>
for reporting a bug
Roberto Castrogiovanni <castrogiovanni.roberto@gmail.com>
for reporting a minor bug

View File

@ -1239,13 +1239,20 @@ def getConsoleWidth(default=80):
return width if width else default
def parseXmlFile(xmlFile, handler):
checkFile(xmlFile)
xfile = codecs.open(xmlFile, 'rb', conf.dataEncoding)
content = xfile.read()
stream = StringIO(content)
if xmlFile not in kb.cache.content:
if conf.parseLock:
conf.parseLock.acquire()
if xmlFile not in kb.cache.content:
checkFile(xmlFile)
xfile = codecs.open(xmlFile, 'rb', conf.dataEncoding)
content = xfile.read()
kb.cache.content[xmlFile] = content
xfile.close()
if conf.parseLock:
conf.parseLock.release()
stream = StringIO(kb.cache.content[xmlFile])
parse(stream, handler)
stream.close()
xfile.close()
def readXmlFile(xmlFile):
checkFile(xmlFile)

View File

@ -993,6 +993,7 @@ def __setConfAttributes():
conf.outputPath = None
conf.paramDict = {}
conf.parameters = {}
conf.parseLock = None
conf.path = None
conf.port = None
conf.redirectHandled = False
@ -1022,6 +1023,7 @@ def __setKnowledgeBaseAttributes():
kb.bannerFp = advancedDict()
kb.cache = advancedDict()
kb.cache.content = {}
kb.cache.regex = {}
kb.commonOutputs = None

View File

@ -252,6 +252,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
iolock = threading.Lock()
valuelock = threading.Lock()
conf.seqLock = threading.Lock()
conf.parseLock = threading.Lock()
conf.threadContinue = True
def downloadThread():
@ -416,6 +417,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
dataToStdout(infoMsg)
conf.seqLock = None
conf.parseLock = None
# No multi-threading (--threads = 1)
else: