Commit c488f7f1 by devttys0

Added error handling for failed dependency modules.

parent 62b3345d
......@@ -27,10 +27,13 @@ def main():
t.setDaemon(True)
t.start()
if len(sys.argv) == 1:
usage(modules)
elif not modules.execute():
modules.execute(*sys.argv[1:], signature=True)
try:
if len(sys.argv) == 1:
usage(modules)
elif not modules.execute():
modules.execute(*sys.argv[1:], signature=True)
except binwalk.DependencyError as e:
sys.exit(1)
if __name__ == '__main__':
try:
......
from binwalk.core.module import Modules
from binwalk.core.module import Modules, DependencyError
......@@ -274,6 +274,8 @@ class Module(object):
Returns None.
'''
exception_header_width = 100
e = Error(**kwargs)
e.module = self
......@@ -281,9 +283,9 @@ class Module(object):
if e.exception:
sys.stderr.write("\n" + e.module.__class__.__name__ + " Exception: " + str(e.exception) + "\n")
sys.stderr.write("-" * self.config.display.HEADER_WIDTH + "\n")
sys.stderr.write("-" * exception_header_width + "\n")
traceback.print_exc(file=sys.stderr)
sys.stderr.write("-" * self.config.display.HEADER_WIDTH + "\n\n")
sys.stderr.write("-" * exception_header_width + "\n\n")
elif e.description:
sys.stderr.write("\n" + e.module.__class__.__name__ + " Error: " + e.description + "\n\n")
......@@ -348,6 +350,9 @@ class Status(object):
for (k,v) in iterator(self.kwargs):
setattr(self, k, v)
class DependencyError(Exception):
pass
class Modules(object):
'''
Main class used for running and managing modules.
......@@ -491,9 +496,13 @@ class Modules(object):
continue
if not has_key(self.loaded_modules, dependency):
# TODO: What to do if a dependency fails? Anything?
# self.run will automatically add the dependency class instance to self.loaded_modules
self.run(dependency)
kwargs[kwarg] = self.loaded_modules[dependency]
if self.loaded_modules[dependency].errors:
raise DependencyError("Failed to load " + str(dependency))
else:
kwargs[kwarg] = self.loaded_modules[dependency]
return kwargs
......
......@@ -140,6 +140,6 @@ class Configuration(Module):
self.error(description="Cannot open file : %s" % str(e))
# If no files could be opened, quit permaturely
if len(self.target_files) == 0:
raise Exception("Failed to open any files for scanning")
#if len(self.target_files) == 0:
# raise Exception("Failed to open any files for scanning")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment