Skip to content

Commit 2425e32

Browse files
committed
Changes to not catch exception related to coding errors
1 parent 7b2a4e8 commit 2425e32

12 files changed

Lines changed: 71 additions & 3 deletions

File tree

plaso/engine/single_process.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def _CacheFileSystem(self, path_spec):
6464
self._file_system_cache.remove(file_system)
6565
self._file_system_cache.append(file_system)
6666

67+
# pylint: disable=missing-raises-doc
6768
def _ProcessPathSpec(self, extraction_worker, parser_mediator, path_spec):
6869
"""Processes a path specification.
6970
@@ -82,10 +83,14 @@ def _ProcessPathSpec(self, extraction_worker, parser_mediator, path_spec):
8283
excluded_find_specs = (
8384
self.collection_filters_helper.excluded_file_system_find_specs)
8485

86+
# pylint: disable=try-except-raise
8587
try:
8688
extraction_worker.ProcessPathSpec(
8789
parser_mediator, path_spec, excluded_find_specs=excluded_find_specs)
8890

91+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
92+
raise
93+
8994
except KeyboardInterrupt:
9095
self._abort = True
9196

plaso/lib/definitions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
"""The definitions."""
33

44

5+
# Exceptions (or errors) that should not be caught in a catch all try-catch.
6+
EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL = (
7+
AttributeError, ImportError, NameError, TypeError, UnboundLocalError)
8+
59
MICROSECONDS_PER_SECOND = 1000000
610
MICROSECONDS_PER_MINUTE = 60000000
711
NANOSECONDS_PER_SECOND = 1000000000

plaso/multi_processing/analysis_process.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ def _Main(self):
148148

149149
storage_writer.WriteTaskStart()
150150

151+
# pylint: disable=try-except-raise
151152
try:
152153
logger.debug(
153154
'{0!s} (PID: {1:d}) started monitoring event queue.'.format(
@@ -179,6 +180,9 @@ def _Main(self):
179180

180181
self._analysis_mediator.ProduceAnalysisReport(self._analysis_plugin)
181182

183+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
184+
raise
185+
182186
# All exceptions need to be caught here to prevent the process
183187
# from being killed by an uncaught exception.
184188
except Exception as exception: # pylint: disable=broad-except

plaso/multi_processing/worker_process.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ def _Main(self):
196196

197197
self._status = definitions.STATUS_INDICATOR_RUNNING
198198

199+
# pylint: disable=try-except-raise
199200
try:
200201
logger.debug('{0!s} (PID: {1:d}) started monitoring task queue.'.format(
201202
self._name, self._pid))
@@ -217,6 +218,9 @@ def _Main(self):
217218
logger.debug('{0!s} (PID: {1:d}) stopped monitoring task queue.'.format(
218219
self._name, self._pid))
219220

221+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
222+
raise
223+
220224
# All exceptions need to be caught here to prevent the process
221225
# from being killed by an uncaught exception.
222226
except Exception as exception: # pylint: disable=broad-except
@@ -261,6 +265,7 @@ def _Main(self):
261265
except errors.QueueAlreadyClosed:
262266
logger.error('Queue for {0:s} was already closed.'.format(self.name))
263267

268+
# pylint: disable=missing-raises-doc
264269
def _ProcessPathSpec(self, extraction_worker, parser_mediator, path_spec):
265270
"""Processes a path specification.
266271
@@ -279,10 +284,14 @@ def _ProcessPathSpec(self, extraction_worker, parser_mediator, path_spec):
279284
excluded_find_specs = (
280285
self._collection_filters_helper.excluded_file_system_find_specs)
281286

287+
# pylint: disable=try-except-raise
282288
try:
283289
extraction_worker.ProcessPathSpec(
284290
parser_mediator, path_spec, excluded_find_specs=excluded_find_specs)
285291

292+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
293+
raise
294+
286295
except dfvfs_errors.CacheFullError:
287296
# TODO: signal engine of failure.
288297
self._abort = True

plaso/parsers/esedb.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import pyesedb
55

6+
from plaso.lib import definitions
67
from plaso.lib import specification
78
from plaso.parsers import interface
89
from plaso.parsers import logger
@@ -97,6 +98,7 @@ def GetFormatSpecification(cls):
9798
format_specification.AddNewSignature(b'\xef\xcd\xab\x89', offset=4)
9899
return format_specification
99100

101+
# pylint: disable=missing-raises-doc
100102
def ParseFileObject(self, parser_mediator, file_object):
101103
"""Parses an ESE database file-like object.
102104
@@ -116,6 +118,7 @@ def ParseFileObject(self, parser_mediator, file_object):
116118

117119
# Compare the list of available plugin objects.
118120
cache = ESEDBCache()
121+
119122
try:
120123
for plugin in self._plugins:
121124
if parser_mediator.abort:
@@ -132,10 +135,14 @@ def ParseFileObject(self, parser_mediator, file_object):
132135
logger.debug('Parsing file: {0:s} with plugin: {1:s}'.format(
133136
display_name, plugin.NAME))
134137

138+
# pylint: disable=try-except-raise
135139
try:
136140
plugin.UpdateChainAndProcess(
137141
parser_mediator, cache=cache, database=database)
138142

143+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
144+
raise
145+
139146
except Exception as exception: # pylint: disable=broad-except
140147
parser_mediator.ProduceExtractionWarning((
141148
'plugin: {0:s} unable to parse ESE database with error: '

plaso/parsers/esedb_plugins/interface.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from dtfabric import errors as dtfabric_errors
99
from dtfabric.runtime import fabric as dtfabric_fabric
1010

11+
from plaso.lib import definitions
1112
from plaso.lib import errors
1213
from plaso.parsers import logger
1314
from plaso.parsers import plugins
@@ -214,6 +215,7 @@ def _GetRecordValue(self, record, value_entry):
214215
return long_value.get_data()
215216
return record.get_value_data(value_entry)
216217

218+
# pylint: disable=missing-raises-doc
217219
def _GetRecordValues(
218220
self, parser_mediator, table_name, record, value_mappings=None):
219221
"""Retrieves the values from the record.
@@ -254,10 +256,14 @@ def _GetRecordValues(
254256
self.NAME, value_callback_method, column_name, table_name))
255257

256258
if value_callback:
259+
# pylint: disable=try-except-raise
257260
try:
258261
value_data = record.get_value_data(value_entry)
259262
value = value_callback(value_data)
260263

264+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
265+
raise
266+
261267
except Exception as exception: # pylint: disable=broad-except
262268
logger.error(exception)
263269
value = None

plaso/parsers/olecf.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import pyolecf
55

6+
from plaso.lib import definitions
67
from plaso.lib import specification
78
from plaso.parsers import interface
89
from plaso.parsers import logger
@@ -40,6 +41,7 @@ def GetFormatSpecification(cls):
4041

4142
return format_specification
4243

44+
# pylint: disable=missing-raises-doc
4345
def ParseFileObject(self, parser_mediator, file_object):
4446
"""Parses an OLE Compound File (OLECF) file-like object.
4547
@@ -88,19 +90,28 @@ def ParseFileObject(self, parser_mediator, file_object):
8890
logger.debug('Parsing file: {0:s} with plugin: {1:s}'.format(
8991
display_name, plugin.NAME))
9092

93+
# pylint: disable=try-except-raise
9194
try:
9295
plugin.UpdateChainAndProcess(parser_mediator, root_item=root_item)
9396

97+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
98+
raise
99+
94100
except Exception as exception: # pylint: disable=broad-except
95101
parser_mediator.ProduceExtractionWarning((
96102
'plugin: {0:s} unable to parse OLECF file with error: '
97103
'{1!s}').format(plugin.NAME, exception))
98104

99105
if self._default_plugin and not parser_mediator.abort:
106+
# pylint: disable=try-except-raise
100107
try:
101108
self._default_plugin.UpdateChainAndProcess(
102109
parser_mediator, root_item=root_item)
103110

111+
# Raise on coding errors.
112+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
113+
raise
114+
104115
except Exception as exception: # pylint: disable=broad-except
105116
parser_mediator.ProduceExtractionWarning((
106117
'plugin: {0:s} unable to parse OLECF file with error: '

plaso/parsers/safari_cookies.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def _ParsePage(self, parser_mediator, file_offset, page_data):
109109

110110
self._ParseRecord(parser_mediator, page_data, record_offset)
111111

112+
# pylint: disable=missing-raises-doc
112113
def _ParseRecord(self, parser_mediator, page_data, record_offset):
113114
"""Parses a record from the page data.
114115
@@ -174,11 +175,15 @@ def _ParseRecord(self, parser_mediator, page_data, record_offset):
174175
if event_data.cookie_name != plugin.COOKIE_NAME:
175176
continue
176177

178+
# pylint: disable=try-except-raise
177179
try:
178180
plugin.UpdateChainAndProcess(
179181
parser_mediator, cookie_name=event_data.cookie_name,
180182
cookie_data=event_data.cookie_value, url=event_data.url)
181183

184+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
185+
raise
186+
182187
except Exception as exception: # pylint: disable=broad-except
183188
parser_mediator.ProduceExtractionWarning(
184189
'plugin: {0:s} unable to parse cookie with error: {1!s}'.format(

plaso/parsers/sqlite.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from dfvfs.path import factory as dfvfs_factory
99

10+
from plaso.lib import definitions
1011
from plaso.lib import specification
1112
from plaso.parsers import interface
1213
from plaso.parsers import logger
@@ -372,6 +373,7 @@ def GetFormatSpecification(cls):
372373
format_specification.AddNewSignature(b'SQLite format 3', offset=0)
373374
return format_specification
374375

376+
# pylint: disable=missing-raises-doc
375377
def ParseFileEntry(self, parser_mediator, file_entry):
376378
"""Parses a SQLite database file entry.
377379
@@ -425,11 +427,15 @@ def ParseFileEntry(self, parser_mediator, file_entry):
425427
parser_mediator.SetFileEntry(file_entry)
426428
parser_mediator.AddEventAttribute('schema_match', schema_match)
427429

430+
# pylint: disable=try-except-raise
428431
try:
429432
plugin.UpdateChainAndProcess(
430433
parser_mediator, cache=cache, database=database,
431434
database_wal=database_wal, wal_file_entry=wal_file_entry)
432435

436+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
437+
raise
438+
433439
except Exception as exception: # pylint: disable=broad-except
434440
parser_mediator.ProduceExtractionWarning((
435441
'plugin: {0:s} unable to parse SQLite database with error: '
@@ -451,6 +457,9 @@ def ParseFileEntry(self, parser_mediator, file_entry):
451457
parser_mediator, cache=cache, database=database,
452458
database_wal=database_wal, wal_file_entry=wal_file_entry)
453459

460+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
461+
raise
462+
454463
except Exception as exception: # pylint: disable=broad-except
455464
parser_mediator.ProduceExtractionWarning((
456465
'plugin: {0:s} unable to parse SQLite database and WAL with '

plaso/parsers/sqlite_plugins/chrome_cookies.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def __init__(self):
6969
self._cookie_plugins = (
7070
cookie_plugins_manager.CookiePluginsManager.GetPlugins())
7171

72+
# pylint: disable=missing-raises-doc
7273
def ParseCookieRow(self, parser_mediator, query, row, **unused_kwargs):
7374
"""Parses a cookie row.
7475
@@ -132,11 +133,15 @@ def ParseCookieRow(self, parser_mediator, query, row, **unused_kwargs):
132133
if cookie_name != plugin.COOKIE_NAME:
133134
continue
134135

136+
# pylint: disable=try-except-raise
135137
try:
136138
plugin.UpdateChainAndProcess(
137139
parser_mediator, cookie_data=cookie_data, cookie_name=cookie_name,
138140
url=url)
139141

142+
except definitions.EXCEPTIONS_EXCLUDED_FROM_CATCH_ALL:
143+
raise
144+
140145
except Exception as exception: # pylint: disable=broad-except
141146
parser_mediator.ProduceExtractionWarning(
142147
'plugin: {0:s} unable to parse cookie with error: {1!s}'.format(

0 commit comments

Comments
 (0)