From 71234beccb64e3fc46716baabc5c824e82d58301 Mon Sep 17 00:00:00 2001 From: "Saikrishna Ramdeni (sramdeni)" Date: Wed, 20 Aug 2025 07:20:48 +0000 Subject: [PATCH] Pull request #4866: decompress : unit test for snort 3 vba decompression divide-by-zero crasher fix Merge in SNORT/snort3 from ~SRAMDENI/snort3:divide_by_zero_crasher_fix_ut to master Squashed commit of the following: commit 88af776caee8260b7d2287186b3bfc7a20536119 Author: sramdeni Date: Wed Aug 13 23:26:56 2025 +0530 decompress : added unit test for vba decompress divide-by-zero fix --- src/decompress/file_olefile.h | 5 +++++ src/decompress/file_oleheader.h | 5 +++++ src/decompress/test/file_olefile_test.cc | 12 ++++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/decompress/file_olefile.h b/src/decompress/file_olefile.h index de5a76095..452068f98 100644 --- a/src/decompress/file_olefile.h +++ b/src/decompress/file_olefile.h @@ -273,6 +273,11 @@ private: int32_t fat_list_len = 0; int32_t* mini_fat_list = nullptr; int32_t mini_fat_list_len = 0; + +#ifdef UNIT_TEST +public: + void set_header(OleHeader* h) { header = h; } +#endif }; void oleprocess(const uint8_t* const, const uint32_t, uint8_t*&, uint32_t&); diff --git a/src/decompress/file_oleheader.h b/src/decompress/file_oleheader.h index 77d02c873..cee109685 100644 --- a/src/decompress/file_oleheader.h +++ b/src/decompress/file_oleheader.h @@ -102,6 +102,11 @@ private: int32_t difat_array[MAX_DIFAT_SECTORS] = {}; byte_order_endianess byte_order_endian = LITL_END; + +#ifdef UNIT_TEST +public: + void set_mini_sector_size_raw(uint16_t val) { mini_sector_size = val; } +#endif }; #endif diff --git a/src/decompress/test/file_olefile_test.cc b/src/decompress/test/file_olefile_test.cc index 58d59554d..b915697c6 100644 --- a/src/decompress/test/file_olefile_test.cc +++ b/src/decompress/test/file_olefile_test.cc @@ -182,6 +182,18 @@ TEST(Olefile_ole, bytes_to_copy_test) delete olefile; } +TEST(Olefile_ole, get_mini_fat_offset_divide_by_zero) +{ + uint8_t dummy_buf[512] = {0}; + OleFile* olefile = new OleFile(dummy_buf, sizeof(dummy_buf)); + OleHeader* test_header = new OleHeader(); + test_header->set_mini_sector_size_raw(0); + olefile->set_header(test_header); + int32_t result = olefile->get_mini_fat_offset(0); + CHECK(result == -1); + delete olefile; +} + TEST_GROUP(fat_mini_fat_list) { }; -- 2.47.3