Skip to content

Commit 17c737a

Browse files
Timothy KelseyTravis McPeak
Timothy Kelsey
authored and
Travis McPeak
committed
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
1 parent 0acf9f9 commit 17c737a

File tree

6 files changed

+24
-7
lines changed

6 files changed

+24
-7
lines changed

bandit/core/manager.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ def __init__(self, config, agg_type, debug=False, verbose=False,
7171
self.progress = b_constants.progress_increment
7272
self.scores = []
7373

74+
def get_skipped(self):
75+
ret = []
76+
# "skip" is a tuple of name and reason, decode just the name
77+
for skip in self.skipped:
78+
if isinstance(skip[0], bytes):
79+
ret.append((skip[0].decode('utf-8'), skip[1]))
80+
else:
81+
ret.append(skip)
82+
return ret
83+
7484
def get_issue_list(self,
7585
sev_level=b_constants.LOW,
7686
conf_level=b_constants.LOW):

bandit/core/tester.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,12 @@ def run_tests(self, raw_context, checktype):
6767
if (result is not None and
6868
result.lineno not in self.nosec_lines and
6969
temp_context['lineno'] not in self.nosec_lines):
70-
result.fname = temp_context['filename']
70+
71+
if isinstance(temp_context['filename'], bytes):
72+
result.fname = temp_context['filename'].decode('utf-8')
73+
else:
74+
result.fname = temp_context['filename']
75+
7176
if result.lineno is None:
7277
result.lineno = temp_context['lineno']
7378
result.linerange = temp_context['linerange']

bandit/formatters/html.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ def report(manager, fileobj, sev_level, conf_level, lines=-1):
331331

332332
# build the skipped string to insert in the report
333333
skipped_str = ''.join('%s <b>reason:</b> %s<br>' % (fname, reason)
334-
for fname, reason in manager.skipped)
334+
for fname, reason in manager.get_skipped())
335335
if skipped_str:
336336
skipped_text = skipped_block.format(files_list=skipped_str)
337337
else:

bandit/formatters/json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def report(manager, fileobj, sev_level, conf_level, lines=-1):
101101
'''
102102

103103
machine_output = {'results': [], 'errors': []}
104-
for (fname, reason) in manager.skipped:
104+
for (fname, reason) in manager.get_skipped():
105105
machine_output['errors'].append({'filename': fname,
106106
'reason': reason})
107107

bandit/formatters/screen.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,9 @@ def report(manager, fileobj, sev_level, conf_level, lines=-1):
172172
(manager.metrics.data['_totals']['nosec']))
173173

174174
bits.append(get_metrics(manager))
175-
bits.append(header("Files skipped (%i):", len(manager.skipped)))
176-
bits.extend(["\t%s (%s)" % skip for skip in manager.skipped])
175+
skipped = manager.get_skipped()
176+
bits.append(header("Files skipped (%i):", len(skipped)))
177+
bits.extend(["\t%s (%s)" % skip for skip in skipped])
177178
do_print(bits)
178179

179180
if fileobj.name != sys.stdout.name:

bandit/formatters/text.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,10 @@ def report(manager, fileobj, sev_level, conf_level, lines=-1):
150150
bits.append('\tTotal lines skipped (#nosec): %i' %
151151
(manager.metrics.data['_totals']['nosec']))
152152

153+
skipped = manager.get_skipped()
153154
bits.append(get_metrics(manager))
154-
bits.append("Files skipped (%i):" % len(manager.skipped))
155-
bits.extend(["\t%s (%s)" % skip for skip in manager.skipped])
155+
bits.append("Files skipped (%i):" % len(skipped))
156+
bits.extend(["\t%s (%s)" % skip for skip in skipped])
156157
result = '\n'.join([bit for bit in bits]) + '\n'
157158

158159
with fileobj:

0 commit comments

Comments
 (0)