Fixing some UTF8 encoding issues in file names

The names of skipped files were not being encoded properly in
output reports.

Change-Id: I38055512d71b3268b5241d50f1aa01a4b28ed332
Closes-Bug: #1647925
This commit is contained in:
Timothy Kelsey 2017-01-06 17:22:33 +00:00 committed by Travis McPeak
parent 0acf9f95db
commit 17c737a391
6 changed files with 24 additions and 7 deletions

View File

@ -71,6 +71,16 @@ class BanditManager(object):
self.progress = b_constants.progress_increment
self.scores = []
def get_skipped(self):
ret = []
# "skip" is a tuple of name and reason, decode just the name
for skip in self.skipped:
if isinstance(skip[0], bytes):
ret.append((skip[0].decode('utf-8'), skip[1]))
else:
ret.append(skip)
return ret
def get_issue_list(self,
sev_level=b_constants.LOW,
conf_level=b_constants.LOW):

View File

@ -67,7 +67,12 @@ class BanditTester(object):
if (result is not None and
result.lineno not in self.nosec_lines and
temp_context['lineno'] not in self.nosec_lines):
result.fname = temp_context['filename']
if isinstance(temp_context['filename'], bytes):
result.fname = temp_context['filename'].decode('utf-8')
else:
result.fname = temp_context['filename']
if result.lineno is None:
result.lineno = temp_context['lineno']
result.linerange = temp_context['linerange']

View File

@ -331,7 +331,7 @@ pre {
# build the skipped string to insert in the report
skipped_str = ''.join('%s <b>reason:</b> %s<br>' % (fname, reason)
for fname, reason in manager.skipped)
for fname, reason in manager.get_skipped())
if skipped_str:
skipped_text = skipped_block.format(files_list=skipped_str)
else:

View File

@ -101,7 +101,7 @@ def report(manager, fileobj, sev_level, conf_level, lines=-1):
'''
machine_output = {'results': [], 'errors': []}
for (fname, reason) in manager.skipped:
for (fname, reason) in manager.get_skipped():
machine_output['errors'].append({'filename': fname,
'reason': reason})

View File

@ -172,8 +172,9 @@ def report(manager, fileobj, sev_level, conf_level, lines=-1):
(manager.metrics.data['_totals']['nosec']))
bits.append(get_metrics(manager))
bits.append(header("Files skipped (%i):", len(manager.skipped)))
bits.extend(["\t%s (%s)" % skip for skip in manager.skipped])
skipped = manager.get_skipped()
bits.append(header("Files skipped (%i):", len(skipped)))
bits.extend(["\t%s (%s)" % skip for skip in skipped])
do_print(bits)
if fileobj.name != sys.stdout.name:

View File

@ -150,9 +150,10 @@ def report(manager, fileobj, sev_level, conf_level, lines=-1):
bits.append('\tTotal lines skipped (#nosec): %i' %
(manager.metrics.data['_totals']['nosec']))
skipped = manager.get_skipped()
bits.append(get_metrics(manager))
bits.append("Files skipped (%i):" % len(manager.skipped))
bits.extend(["\t%s (%s)" % skip for skip in manager.skipped])
bits.append("Files skipped (%i):" % len(skipped))
bits.extend(["\t%s (%s)" % skip for skip in skipped])
result = '\n'.join([bit for bit in bits]) + '\n'
with fileobj: