From 00b9d85ffcef51d1d358f97bf9280e1096cec2ca Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 18 Mar 2011 16:26:39 +0000 Subject: [PATCH] fix regarding bug report from andyroyalbattle@yahoo.it --- lib/core/common.py | 18 ++++++++++++------ lib/core/option.py | 1 - lib/core/update.py | 4 +++- lib/parse/cmdline.py | 5 +---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index 67e0803eb..f79c01b54 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -1694,7 +1694,7 @@ def getPartRun(): # Return the INI tag to consider for common outputs (e.g. 'Databases') return commonPartsDict[retVal][1] if retVal in commonPartsDict else retVal -def getUnicode(value, encoding=None): +def getUnicode(value, encoding=None, system=False): """ Return the unicode representation of the supplied value: @@ -1706,12 +1706,18 @@ def getUnicode(value, encoding=None): u'1' """ - if isinstance(value, unicode): - return value - elif isinstance(value, basestring): - return unicode(value, encoding or UNICODE_ENCODING, errors="replace") + if not system: + if isinstance(value, unicode): + return value + elif isinstance(value, basestring): + return unicode(value, encoding or UNICODE_ENCODING, errors="replace") + else: + return unicode(value) # encoding ignored for non-basestring instances else: - return unicode(value) # encoding ignored for non-basestring instances + try: + return getUnicode(value, sys.getfilesystemencoding() or sys.stdin.encoding) + except: + return getUnicode(value, UNICODE_ENCODING) # http://boredzo.org/blog/archives/2007-01-06/longest-common-prefix-in-python-2 def longestCommonPrefix(*sequences): diff --git a/lib/core/option.py b/lib/core/option.py index c21500929..0758cb70e 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -30,7 +30,6 @@ from lib.core.common import extractRegexResult from lib.core.common import getConsoleWidth from lib.core.common import getFileItems from lib.core.common import getFileType -from lib.core.common import getUnicode from lib.core.common import normalizePath from lib.core.common import ntToPosixSlashes from lib.core.common import openFile diff --git a/lib/core/update.py b/lib/core/update.py index 685f46d76..b957ed06a 100644 --- a/lib/core/update.py +++ b/lib/core/update.py @@ -68,6 +68,7 @@ def update(): client = pysvn.Client() client.callback_notify = notify client.update(rootDir) + except ImportError, _: debugMsg = "sqlmap will try to update itself using 'svn' command" logger.debug(debugMsg) @@ -79,8 +80,9 @@ def update(): svnStdout, svnStderr = process.communicate() if svnStderr: - errMsg = svnStderr.strip() + errMsg = getUnicode(svnStderr, system=True).strip() logger.error(errMsg) + elif svnStdout: revision = re.search("revision\s+([\d]+)", svnStdout, re.I) diff --git a/lib/parse/cmdline.py b/lib/parse/cmdline.py index a9be1f0f3..718cd1e24 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -536,10 +536,7 @@ def cmdLineParser(): args = [] for arg in sys.argv: - try: - args.append(getUnicode(arg, sys.getfilesystemencoding() or sys.stdin.encoding)) - except: - args.append(getUnicode(arg, UNICODE_ENCODING)) + args.append(getUnicode(arg, system=True)) (args, _) = parser.parse_args(args)