Fix infinite loop issue

Running bandit using relative paths inside a subdirectory when the current
directory contains __init__.py causes bandit to be stuck in an infinite
loop.

Co-Authored-By: Calvin Li
Closes-Bug: #1743042
Change-Id: I247108c1365847134ee561073ea0eb43c57b54cc
This commit is contained in:
Tin Lam 2018-01-13 21:58:15 -06:00
parent d22d76c9da
commit 90f031c973
6 changed files with 14 additions and 1 deletions

View File

@ -151,7 +151,7 @@ def get_module_qualname_from_path(path):
' Missing path or file name' % (path))
qname = [os.path.splitext(tail)[0]]
while head not in ['/', '.']:
while head not in ['/', '.', '']:
if os.path.isfile(os.path.join(head, '__init__.py')):
(head, tail) = os.path.split(head)
qname.insert(0, tail)

0
examples/__init__.py Normal file
View File

View File

View File

@ -0,0 +1,3 @@
# A sample test file in a subdirectory and its parents both containing
# an __init__.py file outlined in bug/1743042.
print('hopefully no vulnerabilities here')

View File

@ -121,6 +121,8 @@ source-dir = doc/source
[pbr]
autodoc_tree_index_modules = True
autodoc_tree_excludes =
examples*
[bdist_wheel]
universal = 1

View File

@ -285,6 +285,14 @@ class FunctionalTests(testtools.TestCase):
}
self.check_example('okay.py', expect)
def test_subdirectory_okay(self):
'''Test a vulnerability-free file under a subdirectory.'''
expect = {
'SEVERITY': {'UNDEFINED': 0, 'LOW': 0, 'MEDIUM': 0, 'HIGH': 0},
'CONFIDENCE': {'UNDEFINED': 0, 'LOW': 0, 'MEDIUM': 0, 'HIGH': 0}
}
self.check_example('init-py-test/subdirectory-okay.py', expect)
def test_os_chmod(self):
'''Test setting file permissions.'''
filename = 'os-chmod-{}.py'