From ad81889229c06264903159ac0e74faf385786074 Mon Sep 17 00:00:00 2001 From: Kristinn Date: Tue, 19 Mar 2019 13:38:31 +0000 Subject: [PATCH] Bugfix for SQLite plugin when "SELECT *" is used as a SELECT statement (#72) * Adding an error handling for SELECT * statements. * Incrementing version. --- l2tscaffolder/__init__.py | 2 +- l2tscaffolder/scaffolders/plaso_sqlite.py | 15 +++++++++++++++ tests/other/test_version.py | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/l2tscaffolder/__init__.py b/l2tscaffolder/__init__.py index 4ef031e..0fa8a5d 100644 --- a/l2tscaffolder/__init__.py +++ b/l2tscaffolder/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """defining the version""" -__version__ = '20190130' +__version__ = '20190314' diff --git a/l2tscaffolder/scaffolders/plaso_sqlite.py b/l2tscaffolder/scaffolders/plaso_sqlite.py index 67a37ff..7676972 100644 --- a/l2tscaffolder/scaffolders/plaso_sqlite.py +++ b/l2tscaffolder/scaffolders/plaso_sqlite.py @@ -65,6 +65,13 @@ def ValidateAnswer(self, answer: dict): 'Unable to run query [{0:s}] with error: {1!s}'.format( query_name, exception)) + star_items = [x for x in query.split() if x == '*'] + if star_items: + raise errors.UnableToConfigure(( + 'Unable to generate parser while using * to select columns. ' + 'Please adjust your SELECT statements to include explicit ' + 'column names.')) + class PlasoSQLiteScaffolder(plaso.PlasoPluginScaffolder): """The plaso SQLite plugin scaffolder. @@ -211,6 +218,10 @@ def GenerateFiles(self) -> Iterator[Tuple[str, str]]: Yields: tuple: file name and content of the file to be written to disk. + + Raises: + errors.UnableToConfigure: if it is not possible to generate + the files. """ _, _, database_name = self.test_file.rpartition(os.sep) self.database_name = database_name @@ -226,6 +237,10 @@ def GenerateFiles(self) -> Iterator[Tuple[str, str]]: sql_columns[query_name] = [] for column in self._GetQueryColumns(query): + if column == '*': + raise errors.UnableToConfigure( + 'Cannot use a "*" as a column name, please select a different ' + 'SELECT statement.') if 'time' in column: timestamp_columns[query_name].append(column.strip()) sql_columns[query_name].append(column) diff --git a/tests/other/test_version.py b/tests/other/test_version.py index 7dfb79c..8ce9080 100644 --- a/tests/other/test_version.py +++ b/tests/other/test_version.py @@ -12,7 +12,7 @@ class VersionTest(unittest.TestCase): def testGetVersion(self): """testing the get version""" actual = l2tscaffolder.__version__ - self.assertEqual('20190130', actual) + self.assertEqual('20190314', actual) if __name__ == '__main__':