diff --git a/lib/core/option.py b/lib/core/option.py index ffa99b2e4..ca937f347 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -117,6 +117,7 @@ from lib.core.threads import getCurrentThreadData from lib.core.update import update from lib.parse.configfile import configFileParser from lib.parse.payloads import loadPayloads +from lib.request.basic import checkCharEncoding from lib.request.connect import Connect as Request from lib.request.dns import DNSServer from lib.request.proxy import ProxyHTTPSHandler @@ -1965,13 +1966,14 @@ def __basicOptionValidation(): raise sqlmapSyntaxException, errMsg if conf.charset: - try: - codecs.lookup(conf.charset) - except LookupError: + _ = checkCharEncoding(conf.charset, False) + if _ is None: errMsg = "unknown charset '%s'. Please visit " % conf.charset errMsg += "'%s' to get the full list of " % CODECS_LIST_PAGE errMsg += "supported charsets" raise sqlmapSyntaxException, errMsg + else: + conf.charset = _ if conf.loadCookies: if not os.path.exists(conf.loadCookies): diff --git a/lib/request/basic.py b/lib/request/basic.py index 620f4c19c..50c900305 100644 --- a/lib/request/basic.py +++ b/lib/request/basic.py @@ -100,14 +100,14 @@ def parseResponse(page, headers): if page: htmlParser(page) -def checkCharEncoding(encoding): +def checkCharEncoding(encoding, warn=True): if encoding: encoding = encoding.lower() else: return encoding # http://www.destructor.de/charsets/index.htm - translate = { "windows-874": "iso-8859-11", "en_us": "utf8", "macintosh": "iso-8859-1", "euc_tw": "big5_tw", "th": "tis-620", "unicode": "utf8", "utc8": "utf8"} + translate = { "windows-874": "iso-8859-11", "en_us": "utf8", "macintosh": "iso-8859-1", "euc_tw": "big5_tw", "th": "tis-620", "unicode": "utf8", "utc8": "utf8", "ebcdic": "ebcdic-cp-be"} for delimiter in (';', ',', '('): if delimiter in encoding: @@ -156,9 +156,10 @@ def checkCharEncoding(encoding): try: codecs.lookup(encoding) except LookupError: - warnMsg = "unknown web page charset '%s'. " % encoding - warnMsg += "Please report by e-mail to %s." % ML - singleTimeLogMessage(warnMsg, logging.WARN, encoding) + if warn: + warnMsg = "unknown web page charset '%s'. " % encoding + warnMsg += "Please report by e-mail to %s." % ML + singleTimeLogMessage(warnMsg, logging.WARN, encoding) encoding = None return encoding