This commit is contained in:
Miroslav Stampar 2019-05-20 11:21:31 +02:00
parent 03224401ab
commit 4cc13d3c1e
5 changed files with 28 additions and 20 deletions

View File

@ -58,7 +58,7 @@ from lib.core.convert import getBytes
from lib.core.convert import getText
from lib.core.convert import getUnicode
from lib.core.convert import htmlunescape
from lib.core.convert import stdoutencode
from lib.core.convert import stdoutEncode
from lib.core.data import conf
from lib.core.data import kb
from lib.core.data import logger
@ -968,9 +968,9 @@ def dataToStdout(data, forceOutput=False, bold=False, content_type=None, status=
try:
if conf.get("api"):
sys.stdout.write(stdoutencode(clearColors(data)), status, content_type)
sys.stdout.write(stdoutEncode(clearColors(data)), status, content_type)
else:
sys.stdout.write(stdoutencode(setColor(data, bold=bold)))
sys.stdout.write(stdoutEncode(setColor(data, bold=bold)))
sys.stdout.flush()
except IOError:

30
lib/core/convert.py Normal file → Executable file
View File

@ -23,6 +23,7 @@ from lib.core.settings import INVALID_UNICODE_PRIVATE_AREA
from lib.core.settings import IS_WIN
from lib.core.settings import NULL
from lib.core.settings import PICKLE_PROTOCOL
from lib.core.settings import PYVERSION
from lib.core.settings import SAFE_HEX_MARKER
from lib.core.settings import UNICODE_ENCODING
from thirdparty import six
@ -100,27 +101,34 @@ def filterNone(values): # Cross-referenced function
def isListLike(value): # Cross-referenced function
raise NotImplementedError
def stdoutencode(data):
retVal = data
def stdoutEncode(value):
value = value or ""
if six.PY2:
if isinstance(value, six.text_type) and PYVERSION < "3.6":
encoding = sys.stdout.encoding or UNICODE_ENCODING
while True:
try:
retVal = getBytes(data or "", sys.stdout.encoding, unsafe=False)
retVal = value.encode(encoding)
break
except UnicodeEncodeError as ex:
value = value[:ex.start] + "?" + value[ex.end:]
# Reference: http://bugs.python.org/issue1602
if IS_WIN:
if '?' in retVal and '?' not in retVal:
warnMsg = "cannot properly display Unicode characters "
if IS_WIN and PYVERSION < "3.6":
warnMsg = "cannot properly display (some) Unicode characters "
warnMsg += "inside Windows OS command prompt "
warnMsg += "(http://bugs.python.org/issue1602). All "
warnMsg += "(https://bugs.python.org/issue1602). All "
warnMsg += "unhandled occurrences will result in "
warnMsg += "replacement with '?' character. Please, find "
warnMsg += "proper character representation inside "
warnMsg += "corresponding output files. "
singleTimeWarnMessage(warnMsg)
except:
retVal = getBytes(data or "", unsafe=False)
if six.PY3:
retVal = getUnicode(retVal, encoding)
else:
retVal = value
return retVal

View File

@ -24,7 +24,7 @@ from lib.core.common import getSafeExString
from lib.core.common import isListLike
from lib.core.common import singleTimeWarnMessage
from lib.core.common import readInput
from lib.core.convert import stdoutencode
from lib.core.convert import stdoutEncode
from lib.core.option import _setHTTPHandlers
from lib.core.option import setVerbosity
from lib.core.option import _setWafFunctions
@ -70,7 +70,7 @@ def resolveCrossReferences():
lib.controller.checks.setVerbosity = setVerbosity
lib.controller.checks.setWafFunctions = _setWafFunctions
lib.utils.sqlalchemy.getSafeExString = getSafeExString
thirdparty.ansistrm.ansistrm.stdoutencode = stdoutencode
thirdparty.ansistrm.ansistrm.stdoutEncode = stdoutEncode
def pympTempLeakPatch(tempDir):
"""

View File

@ -18,7 +18,7 @@ from lib.core.enums import OS
from thirdparty.six import unichr as _unichr
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
VERSION = "1.3.5.109"
VERSION = "1.3.5.110"
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

@ -20,7 +20,7 @@ if IS_WIN:
ctypes.windll.kernel32.SetConsoleTextAttribute.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD]
ctypes.windll.kernel32.SetConsoleTextAttribute.restype = ctypes.wintypes.BOOL
def stdoutencode(data): # Cross-referenced function
def stdoutEncode(data): # Cross-referenced function
raise NotImplementedError
class ColorizingStreamHandler(logging.StreamHandler):
@ -56,7 +56,7 @@ class ColorizingStreamHandler(logging.StreamHandler):
def emit(self, record):
try:
message = stdoutencode(self.format(record))
message = stdoutEncode(self.format(record))
stream = self.stream
if not self.is_tty: