client/tools/rhncfg/actions/configfiles.py | 11 +++++++++++ 1 file changed, 11 insertions(+)
New commits: commit 04699a1b65ef0acacd79f0ac4453280b076eabd7 Author: Milan Zazrivec mzazrivec@redhat.com Date: Fri Oct 21 11:31:11 2011 +0200
743121 - don't report differences containing invalid UTF-8
This fix is to avoid ISEs occuring when client uploads (usualy binary) config file differences that contain invalid UTF-8 characters:
Traceback (most recent call last): File "... mod_python/apache.py", line 299, in HandlerDispatch\n result = object(req) File "... spacewalk/server/apacheHandler.py", line 196, in handler\n ret = self._req_processor.process() File "... spacewalk/server/apacheRequest.py", line 471, in process\n params, method = self.decode(_body) File "... spacewalk/server/apacheRequest.py", line 395, in decode\n self.parser.feed(data) File "... xmlrpclib.py", line 527, in feed\n self._parser.Parse(data, 0) ExpatError: not well-formed (invalid token): line 84, column 1
diff --git a/client/tools/rhncfg/actions/configfiles.py b/client/tools/rhncfg/actions/configfiles.py index 9ccb978..87028d1 100755 --- a/client/tools/rhncfg/actions/configfiles.py +++ b/client/tools/rhncfg/actions/configfiles.py @@ -311,6 +311,14 @@ def deploy(params, topdir=None, cache_only=None):
def diff(params, cache_only=None): + def is_utf8(input): + """Returns true if input is a valid UTF-8 string, False otherwise.""" + try: + input.decode('utf-8') + except UnicodeDecodeError: + return False + return True + if cache_only: return (0, "no-ops for caching", {})
@@ -342,6 +350,9 @@ def diff(params, cache_only=None): extras['missing_files'] = missing_files
if diffs: + for file in diffs.keys(): + if not is_utf8(diffs[file]): + diffs[file] = "%s: binary files differ" % file extras['diffs'] = diffs
log_to_file(0, "Files successfully diffed: %s %s" % (format_file_string(files, create_key_list()), str(extras)))