diff --git a/lib/core/common.py b/lib/core/common.py index 2ce0b4026..15be2daf7 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -2419,17 +2419,10 @@ def getUnicode(value, encoding=None, noneToNull=False): except UnicodeDecodeError: pass - while True: - try: - return six.text_type(value, encoding or (kb.get("pageEncoding") if kb.get("originalPage") else None) or UNICODE_ENCODING) - except UnicodeDecodeError as ex: - try: - return six.text_type(value, UNICODE_ENCODING) - except: - if INVALID_UNICODE_PRIVATE_AREA: - value = value[:ex.start] + "".join(unichr(int('000f00%2x' % ord(_), 16)).encode(UNICODE_ENCODING) for _ in value[ex.start:ex.end]) + value[ex.end:] - else: - value = value[:ex.start] + "".join(INVALID_UNICODE_CHAR_FORMAT % ord(_) for _ in value[ex.start:ex.end]) + value[ex.end:] + try: + return six.text_type(value, encoding or (kb.get("pageEncoding") if kb.get("originalPage") else None) or UNICODE_ENCODING) + except UnicodeDecodeError as ex: + return six.text_type(value, UNICODE_ENCODING, errors="reversible") elif isListLike(value): value = list(getUnicode(_, encoding, noneToNull) for _ in value) return value diff --git a/lib/core/settings.py b/lib/core/settings.py index 39a61c592..aa6f2d35d 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -17,7 +17,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME from lib.core.enums import OS # sqlmap version (...) -VERSION = "1.3.4.16" +VERSION = "1.3.4.15" 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) @@ -825,7 +825,6 @@ th{ """ # Leaving (dirty) possibility to change values from here (e.g. `export SQLMAP__MAX_NUMBER_OF_THREADS=20`) - for key, value in os.environ.items(): if key.upper().startswith("%s_" % SQLMAP_ENVIRONMENT_PREFIX): _ = key[len(SQLMAP_ENVIRONMENT_PREFIX) + 1:].upper() @@ -833,9 +832,11 @@ for key, value in os.environ.items(): globals()[_] = value # Installing "reversible" unicode (decoding) error handler - -def reversible(ex): +def _reversible(ex): if isinstance(ex, UnicodeDecodeError): - return ("".join(INVALID_UNICODE_CHAR_FORMAT % ord(_) for _ in ex.object[ex.start:ex.end]).decode(UNICODE_ENCODING), ex.end) + if INVALID_UNICODE_PRIVATE_AREA: + return ("".join(unichr(int('000f00%2x' % ord(_), 16)) for _ in ex.object[ex.start:ex.end]), ex.end) + else: + return ("".join(INVALID_UNICODE_CHAR_FORMAT % ord(_) for _ in ex.object[ex.start:ex.end]).decode(UNICODE_ENCODING), ex.end) -codecs.register_error("reversible", reversible) +codecs.register_error("reversible", _reversible)