Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ba356ba

Browse files
committed
Minor stability patch for multi-threading console output (#3284)
1 parent ae6235c commit ba356ba

7 files changed

Lines changed: 23 additions & 15 deletions

File tree

lib/core/common.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,8 @@ def dataToStdout(data, forceOutput=False, bold=False, content_type=None, status=
913913

914914
if not kb.get("threadException"):
915915
if forceOutput or not (getCurrentThreadData().disableStdOut or kb.get("wizardMode")):
916-
if kb.get("multiThreadMode"):
916+
multiThreadMode = isMultiThreadMode()
917+
if multiThreadMode:
917918
logging._acquireLock()
918919

919920
if isinstance(data, unicode):
@@ -931,7 +932,7 @@ def dataToStdout(data, forceOutput=False, bold=False, content_type=None, status=
931932
except IOError:
932933
pass
933934

934-
if kb.get("multiThreadMode"):
935+
if multiThreadMode:
935936
logging._releaseLock()
936937

937938
kb.prependFlag = isinstance(data, basestring) and (len(data) == 1 and data not in ('\n', '\r') or len(data) > 2 and data[0] == '\r' and data[-1] != '\n')
@@ -1982,6 +1983,13 @@ def isHexEncodedString(subject):
19821983

19831984
return re.match(r"\A[0-9a-fA-Fx]+\Z", subject) is not None
19841985

1986+
def isMultiThreadMode():
1987+
"""
1988+
Checks if running in multi-thread(ing) mode
1989+
"""
1990+
1991+
return threading.activeCount() > 1
1992+
19851993
@cachedmethod
19861994
def getConsoleWidth(default=80):
19871995
"""

lib/core/dump.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from lib.core.common import getSafeExString
2121
from lib.core.common import getUnicode
2222
from lib.core.common import isListLike
23+
from lib.core.common import isMultiThreadMode
2324
from lib.core.common import normalizeUnicode
2425
from lib.core.common import openFile
2526
from lib.core.common import prioritySortColumns
@@ -74,7 +75,8 @@ def _write(self, data, newline=True, console=True, content_type=None):
7475
if console:
7576
dataToStdout(text)
7677

77-
if kb.get("multiThreadMode"):
78+
multiThreadMode = isMultiThreadMode()
79+
if multiThreadMode:
7880
self._lock.acquire()
7981

8082
try:
@@ -83,7 +85,7 @@ def _write(self, data, newline=True, console=True, content_type=None):
8385
errMsg = "error occurred while writing to log file ('%s')" % getSafeExString(ex)
8486
raise SqlmapGenericException(errMsg)
8587

86-
if kb.get("multiThreadMode"):
88+
if multiThreadMode:
8789
self._lock.release()
8890

8991
kb.dataOutputFlag = True

lib/core/option.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1829,7 +1829,6 @@ def _setKnowledgeBaseAttributes(flushAll=True):
18291829
kb.matchRatio = None
18301830
kb.maxConnectionsFlag = False
18311831
kb.mergeCookies = None
1832-
kb.multiThreadMode = False
18331832
kb.negativeLogic = False
18341833
kb.nullConnection = None
18351834
kb.oldMsf = None

lib/core/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from lib.core.enums import OS
2020

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

lib/core/threads.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ def setDaemon(thread):
110110
def runThreads(numThreads, threadFunction, cleanupFunction=None, forwardException=True, threadChoice=False, startThreadMsg=True):
111111
threads = []
112112

113-
kb.multiThreadMode = True
114113
kb.threadContinue = True
115114
kb.threadException = False
116115

@@ -204,7 +203,6 @@ def runThreads(numThreads, threadFunction, cleanupFunction=None, forwardExceptio
204203
traceback.print_exc()
205204

206205
finally:
207-
kb.multiThreadMode = False
208206
kb.bruteMode = False
209207
kb.threadContinue = True
210208
kb.threadException = False

lib/request/connect.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class WebSocketException(Exception):
4444
from lib.core.common import getRequestHeader
4545
from lib.core.common import getSafeExString
4646
from lib.core.common import getUnicode
47+
from lib.core.common import isMultiThreadMode
4748
from lib.core.common import logHTTPTraffic
4849
from lib.core.common import pushValue
4950
from lib.core.common import popValue
@@ -731,7 +732,7 @@ class _(dict):
731732
else:
732733
logger.debug(warnMsg)
733734
return Connect._retryProxy(**kwargs)
734-
elif kb.testMode or kb.multiThreadMode:
735+
elif kb.testMode or isMultiThreadMode():
735736
logger.critical(warnMsg)
736737
return None, None, None
737738
else:

txt/checksum.md5

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,32 @@ c1da277517c7ec4c23e953a51b51e203 lib/controller/handler.py
2929
fb6be55d21a70765e35549af2484f762 lib/controller/__init__.py
3030
ed7874be0d2d3802f3d20184f2b280d5 lib/core/agent.py
3131
a932126e7d80e545c5d44af178d0bc0c lib/core/bigarray.py
32-
2cb5d057cbb1f333dfd42b8c7262d404 lib/core/common.py
32+
d6961903f261635b2eb3fe7e9c35e8ce lib/core/common.py
3333
de8d27ae6241163ff9e97aa9e7c51a18 lib/core/convert.py
3434
abcb1121eb56d3401839d14e8ed06b6e lib/core/data.py
3535
db60c6ebb63b72ed119e304b359fc1a6 lib/core/datatype.py
3636
b7c912e2af7a3354f6d7c04f556a80b2 lib/core/decorators.py
3737
5f4680b769ae07f22157bd832c97cf8f lib/core/defaults.py
3838
9dfc69ba47209a4ceca494dde9ee8183 lib/core/dicts.py
39-
fd5403505f76eee6829c06b9342e269c lib/core/dump.py
39+
4782353a3072e4d17c4e314daf918d8a lib/core/dump.py
4040
5c91145204092b995ed1ac641e9e291d lib/core/enums.py
4141
84ef8f32e4582fcc294dc14e1997131d lib/core/exception.py
4242
fb6be55d21a70765e35549af2484f762 lib/core/__init__.py
4343
18c896b157b03af716542e5fe9233ef9 lib/core/log.py
4444
fa9f24e88c81a6cef52da3dd5e637010 lib/core/optiondict.py
45-
bdb5a0e1f40d9c4d43593e25c8c58ec6 lib/core/option.py
45+
b56df9d9426027f3450432c2b6428485 lib/core/option.py
4646
fe370021c6bc99daf44b2bfc0d1effb3 lib/core/patch.py
4747
4cfda3735871cd59b213470a0bbc8c3a lib/core/profiling.py
4848
5e2c16a8e2daee22dd545df13386e7a3 lib/core/readlineng.py
4949
7d8a22c582ad201f65b73225e4456170 lib/core/replication.py
5050
3179d34f371e0295dd4604568fb30bcd lib/core/revision.py
5151
d6269c55789f78cf707e09a0f5b45443 lib/core/session.py
52-
6e47f6340889c0241c3055581fd9dd5c lib/core/settings.py
52+
77e8b3de0d19deb37e87cf34bdf18a1a lib/core/settings.py
5353
4483b4a5b601d8f1c4281071dff21ecc lib/core/shell.py
5454
10fd19b0716ed261e6d04f311f6f527c lib/core/subprocessng.py
5555
9c7b5c6397fb3da33e7a4d7876d159c6 lib/core/target.py
5656
7857b24b7865ccb4a05283faa596974d lib/core/testing.py
57-
203d2082929b4ac5454605c8c7c800a9 lib/core/threads.py
57+
e9788d2992f842cf91ab67389bf4372a lib/core/threads.py
5858
2c263c8610667fdc593c50a35ab20f57 lib/core/unescaper.py
5959
ff45c74515fecc95277f7b9ad945f17c lib/core/update.py
6060
5b3f08208be0579356f78ce5805d37b2 lib/core/wordlist.py
@@ -71,7 +71,7 @@ adcecd2d6a8667b22872a563eb83eac0 lib/parse/payloads.py
7171
e4ea70bcd461f5176867dcd89d372386 lib/request/basicauthhandler.py
7272
97b7577fdfe3d8537fe9ea3a070d0507 lib/request/basic.py
7373
fc25d951217077fe655ed2a3a81552ae lib/request/comparison.py
74-
5a1226fc294dd7507be089b5622564d1 lib/request/connect.py
74+
27927a37edfa9c2dfb6e5de9e859d10f lib/request/connect.py
7575
7cba86090b02558f04c6692cef66e772 lib/request/direct.py
7676
2b7509ba38a667c61cefff036ec4ca6f lib/request/dns.py
7777
ceac6b3bf1f726f8ff43c6814e9d7281 lib/request/httpshandler.py

0 commit comments

Comments
 (0)