Commit c488f7f1 by devttys0

Added error handling for failed dependency modules.

parent 62b3345d
...@@ -27,10 +27,13 @@ def main(): ...@@ -27,10 +27,13 @@ def main():
t.setDaemon(True) t.setDaemon(True)
t.start() t.start()
if len(sys.argv) == 1: try:
usage(modules) if len(sys.argv) == 1:
elif not modules.execute(): usage(modules)
modules.execute(*sys.argv[1:], signature=True) elif not modules.execute():
modules.execute(*sys.argv[1:], signature=True)
except binwalk.DependencyError as e:
sys.exit(1)
if __name__ == '__main__': if __name__ == '__main__':
try: try:
......
from binwalk.core.module import Modules from binwalk.core.module import Modules, DependencyError
...@@ -274,6 +274,8 @@ class Module(object): ...@@ -274,6 +274,8 @@ class Module(object):
Returns None. Returns None.
''' '''
exception_header_width = 100
e = Error(**kwargs) e = Error(**kwargs)
e.module = self e.module = self
...@@ -281,9 +283,9 @@ class Module(object): ...@@ -281,9 +283,9 @@ class Module(object):
if e.exception: if e.exception:
sys.stderr.write("\n" + e.module.__class__.__name__ + " Exception: " + str(e.exception) + "\n") 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) 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: elif e.description:
sys.stderr.write("\n" + e.module.__class__.__name__ + " Error: " + e.description + "\n\n") sys.stderr.write("\n" + e.module.__class__.__name__ + " Error: " + e.description + "\n\n")
...@@ -348,6 +350,9 @@ class Status(object): ...@@ -348,6 +350,9 @@ class Status(object):
for (k,v) in iterator(self.kwargs): for (k,v) in iterator(self.kwargs):
setattr(self, k, v) setattr(self, k, v)
class DependencyError(Exception):
pass
class Modules(object): class Modules(object):
''' '''
Main class used for running and managing modules. Main class used for running and managing modules.
...@@ -491,9 +496,13 @@ class Modules(object): ...@@ -491,9 +496,13 @@ class Modules(object):
continue continue
if not has_key(self.loaded_modules, dependency): 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) 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 return kwargs
......
...@@ -140,6 +140,6 @@ class Configuration(Module): ...@@ -140,6 +140,6 @@ class Configuration(Module):
self.error(description="Cannot open file : %s" % str(e)) self.error(description="Cannot open file : %s" % str(e))
# If no files could be opened, quit permaturely # If no files could be opened, quit permaturely
if len(self.target_files) == 0: #if len(self.target_files) == 0:
raise Exception("Failed to open any files for scanning") # 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