From 5c5fccf94b4336bb9d19d29a4a09531eaef73580 Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Fri, 19 Jan 2018 10:30:41 +0100 Subject: [PATCH] unittests: add more sample files for oleobj; test non-streamed --- tests/oleobj/test_basic.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------- tests/test-data/oleobj/embedded-simple-2007.pot | Bin 0 -> 100864 bytes tests/test-data/oleobj/embedded-simple-2007.potm | Bin 0 -> 52860 bytes tests/test-data/oleobj/embedded-simple-2007.potx | Bin 0 -> 52836 bytes tests/test-data/oleobj/embedded-simple-2007.pps | Bin 0 -> 100864 bytes tests/test-data/oleobj/embedded-simple-2007.ppsm | Bin 0 -> 52863 bytes tests/test-data/oleobj/embedded-simple-2007.ppsx | Bin 0 -> 52836 bytes tests/test-data/oleobj/embedded-simple-2007.ppt | Bin 0 -> 100864 bytes tests/test-data/oleobj/embedded-simple-2007.pptm | Bin 0 -> 52846 bytes tests/test-data/oleobj/embedded-simple-2007.pptx | Bin 0 -> 52825 bytes tests/test-data/oleobj/embedded-simple-2007.xla | Bin 0 -> 20480 bytes tests/test-data/oleobj/embedded-simple-2007.xlam | Bin 0 -> 12371 bytes tests/test-data/oleobj/embedded-simple-2007.xls | Bin 0 -> 20480 bytes tests/test-data/oleobj/embedded-simple-2007.xlsb | Bin 0 -> 12600 bytes tests/test-data/oleobj/embedded-simple-2007.xlsm | Bin 0 -> 12369 bytes tests/test-data/oleobj/embedded-simple-2007.xlsx | Bin 0 -> 12346 bytes tests/test-data/oleobj/embedded-simple-2007.xlt | Bin 0 -> 20480 bytes tests/test-data/oleobj/embedded-simple-2007.xltm | Bin 0 -> 12373 bytes tests/test-data/oleobj/embedded-simple-2007.xltx | Bin 0 -> 12350 bytes 19 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 tests/test-data/oleobj/embedded-simple-2007.pot create mode 100644 tests/test-data/oleobj/embedded-simple-2007.potm create mode 100644 tests/test-data/oleobj/embedded-simple-2007.potx create mode 100644 tests/test-data/oleobj/embedded-simple-2007.pps create mode 100644 tests/test-data/oleobj/embedded-simple-2007.ppsm create mode 100644 tests/test-data/oleobj/embedded-simple-2007.ppsx create mode 100644 tests/test-data/oleobj/embedded-simple-2007.ppt create mode 100644 tests/test-data/oleobj/embedded-simple-2007.pptm create mode 100644 tests/test-data/oleobj/embedded-simple-2007.pptx create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xla create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xlam create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xls create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xlsb create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xlsm create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xlsx create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xlt create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xltm create mode 100644 tests/test-data/oleobj/embedded-simple-2007.xltx diff --git a/tests/oleobj/test_basic.py b/tests/oleobj/test_basic.py index 91ab109..783ae5a 100644 --- a/tests/oleobj/test_basic.py +++ b/tests/oleobj/test_basic.py @@ -16,6 +16,35 @@ from oletools import oleobj DEBUG = False +# test samples in test-data/oleobj: filename, embedded file name, embedded md5 +SAMPLES = ( + ('sample_with_calc_embedded.doc', 'calc.exe', + '40e85286357723f326980a3b30f84e4f'), + ('sample_with_lnk_file.doc', 'calc.lnk', + '6aedb1a876d4ad5236f1fbbbeb7274f3'), + ('sample_with_lnk_file.pps', 'calc.lnk', + '6aedb1a876d4ad5236f1fbbbeb7274f3'), + ('sample_with_lnk_file.ppt', 'calc.lnk', + '6aedb1a876d4ad5236f1fbbbeb7274f3'), + ('embedded-unicode.doc', '_nic_de-___________.txt', + '264397735b6f09039ba0adf0dc9fb942'), + ('embedded-unicode-2007.docx', '_nic_de-___________.txt', + '264397735b6f09039ba0adf0dc9fb942'), +) +SAMPLES += tuple( + ('embedded-simple-2007.' + extn, 'simple-text-file.txt', + 'bd5c063a5a43f67b3c50dc7b0f1195af') + for extn in ('doc', 'dot', 'docx', 'docm', 'dotx', 'dotm') +) +SAMPLES += tuple( + ('embedded-simple-2007.' + extn, 'simple-text-file.txt', + 'ab8c65e4c0fc51739aa66ca5888265b4') + for extn in ('xls', 'xlsx', 'xlsb', 'xlsm', 'xla', 'xlam', 'xlt', 'xltm', + 'xltx', 'ppt', 'pptx', 'pptm', 'pps', 'ppsx', 'ppsm', 'pot', + 'potx', 'potm') +) + + def calc_md5(filename): """ calc md5sum of given file in temp_dir """ chunk_size = 4096 @@ -28,6 +57,21 @@ def calc_md5(filename): return hasher.hexdigest() +def preread_file(args): + """helper for TestOleObj.test_non_streamed: preread + call process_file""" + ignore_arg, output_dir, filename = args + if ignore_arg != '-d': + raise ValueError('ignore_arg not as expected!') + with open(filename, 'rb') as file_handle: + data = file_handle.read() + err_stream, err_dumping, did_dump = \ + oleobj.process_file(filename, data, output_dir=output_dir) + if did_dump and not err_stream and not err_dumping: + return oleobj.RETURN_DID_DUMP + else: + return oleobj.RETURN_NO_DUMP # just anything else + + class TestOleObj(unittest.TestCase): """ Tests oleobj basic feature """ @@ -35,6 +79,10 @@ class TestOleObj(unittest.TestCase): """ fixture start: create temp dir """ self.temp_dir = mkdtemp(prefix='oletools-oleobj-') self.did_fail = False + if DEBUG: + import logging + logging.basicConfig(level=logging.DEBUG if DEBUG else logging.INFO) + oleobj.log.setLevel(logging.NOTSET) def tearDown(self): """ fixture end: remove temp dir """ @@ -67,32 +115,12 @@ class TestOleObj(unittest.TestCase): self.fail('found embedded data in {0}'.format(sample_name)) self.assertEqual(ret_val, oleobj.RETURN_NO_DUMP) - def do_test_md5(self, args): + def do_test_md5(self, args, test_fun=oleobj.main): """ helper for test_md5 and test_md5_args """ # name of sample, extension of embedded file, md5 hash of embedded file - expected_results = ( - ('sample_with_calc_embedded.doc', 'calc.exe', - '40e85286357723f326980a3b30f84e4f'), - ('sample_with_lnk_file.doc', 'calc.lnk', - '6aedb1a876d4ad5236f1fbbbeb7274f3'), - ('sample_with_lnk_file.pps', 'calc.lnk', - '6aedb1a876d4ad5236f1fbbbeb7274f3'), - ('sample_with_lnk_file.ppt', 'calc.lnk', - '6aedb1a876d4ad5236f1fbbbeb7274f3'), - ('embedded-unicode.doc', '_nic_de-___________.txt', - '264397735b6f09039ba0adf0dc9fb942'), - ('embedded-unicode-2007.docx', '_nic_de-___________.txt', - '264397735b6f09039ba0adf0dc9fb942'), - ) - expected_results += tuple( - ('embedded-simple-2007.' + extn, 'simple-text-file.txt', - 'bd5c063a5a43f67b3c50dc7b0f1195af') - for extn in ('doc', 'dot', 'docx', 'docm', 'dotx', 'dotm') - ) - data_dir = join(DATA_BASE_DIR, 'oleobj') - for sample_name, embedded_name, expect_hash in expected_results: - ret_val = oleobj.main(args + [join(data_dir, sample_name), ]) + for sample_name, embedded_name, expect_hash in SAMPLES: + ret_val = test_fun(args + [join(data_dir, sample_name), ]) self.assertEqual(ret_val, oleobj.RETURN_DID_DUMP) expect_name = join(self.temp_dir, sample_name + '_' + embedded_name) @@ -108,6 +136,10 @@ class TestOleObj(unittest.TestCase): .format(md5_hash, expect_name, sample_name)) continue + def test_non_streamed(self): + """ Ensure old oleobj behaviour still works: pre-read whole file """ + return self.do_test_md5(['-d', self.temp_dir], test_fun=preread_file) + # just in case somebody calls this file as a script if __name__ == '__main__': diff --git a/tests/test-data/oleobj/embedded-simple-2007.pot b/tests/test-data/oleobj/embedded-simple-2007.pot new file mode 100644 index 0000000..e0cc92a Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.pot differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.potm b/tests/test-data/oleobj/embedded-simple-2007.potm new file mode 100644 index 0000000..e0e87d4 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.potm differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.potx b/tests/test-data/oleobj/embedded-simple-2007.potx new file mode 100644 index 0000000..dc59b5b Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.potx differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.pps b/tests/test-data/oleobj/embedded-simple-2007.pps new file mode 100644 index 0000000..c9c49f9 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.pps differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.ppsm b/tests/test-data/oleobj/embedded-simple-2007.ppsm new file mode 100644 index 0000000..2ba05b8 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.ppsm differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.ppsx b/tests/test-data/oleobj/embedded-simple-2007.ppsx new file mode 100644 index 0000000..a75466b Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.ppsx differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.ppt b/tests/test-data/oleobj/embedded-simple-2007.ppt new file mode 100644 index 0000000..1ebd7ce Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.ppt differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.pptm b/tests/test-data/oleobj/embedded-simple-2007.pptm new file mode 100644 index 0000000..42bcda1 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.pptm differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.pptx b/tests/test-data/oleobj/embedded-simple-2007.pptx new file mode 100644 index 0000000..afc4918 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.pptx differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xla b/tests/test-data/oleobj/embedded-simple-2007.xla new file mode 100644 index 0000000..45c4a81 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xla differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xlam b/tests/test-data/oleobj/embedded-simple-2007.xlam new file mode 100644 index 0000000..25d83ce Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xlam differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xls b/tests/test-data/oleobj/embedded-simple-2007.xls new file mode 100644 index 0000000..43a6fb7 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xls differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xlsb b/tests/test-data/oleobj/embedded-simple-2007.xlsb new file mode 100644 index 0000000..bf30d14 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xlsb differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xlsm b/tests/test-data/oleobj/embedded-simple-2007.xlsm new file mode 100644 index 0000000..912f588 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xlsm differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xlsx b/tests/test-data/oleobj/embedded-simple-2007.xlsx new file mode 100644 index 0000000..2395042 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xlsx differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xlt b/tests/test-data/oleobj/embedded-simple-2007.xlt new file mode 100644 index 0000000..76a4d15 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xlt differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xltm b/tests/test-data/oleobj/embedded-simple-2007.xltm new file mode 100644 index 0000000..81d3ffa Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xltm differ diff --git a/tests/test-data/oleobj/embedded-simple-2007.xltx b/tests/test-data/oleobj/embedded-simple-2007.xltx new file mode 100644 index 0000000..d124b90 Binary files /dev/null and b/tests/test-data/oleobj/embedded-simple-2007.xltx differ -- libgit2 0.21.4