]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #3181: ips_options: creating LiteralSearch object for vba decompression...
authorPranav Bhalerao (prbhaler) <prbhaler@cisco.com>
Fri, 26 Nov 2021 05:03:08 +0000 (05:03 +0000)
committerPranav Bhalerao (prbhaler) <prbhaler@cisco.com>
Fri, 26 Nov 2021 05:03:08 +0000 (05:03 +0000)
Merge in SNORT/snort3 from ~AMARNAYA/snort3:fix_searcher to master

Squashed commit of the following:

commit 20191e9a84c6b1b73d0a589f54c7aab53fb94d91
Author: Amarnath Nayak <amarnaya@cisco.com>
Date:   Tue Nov 23 08:02:30 2021 +0000

    ips_options: creating LiteralSearch object for vba decompression at the time of snort initialization

src/decompress/file_olefile.cc
src/decompress/file_olefile.h
src/decompress/test/file_olefile_test.cc
src/ips_options/ips_vba_data.cc
src/ips_options/ips_vba_data.h

index 73dc1cd97b80a6ef2980010f2504cbc916fa6265..48712e95eaf99a74c2efa5d2f6f5878397486c22 100644 (file)
@@ -524,9 +524,6 @@ bool OleFile :: parse_ole_header()
 // RLE algorithm.
 int32_t OleFile :: get_file_offset(const uint8_t* data, int32_t data_len)
 {
-    search_handle = snort::LiteralSearch::setup();
-    searcher = snort::LiteralSearch::instantiate(search_handle,
-        (const uint8_t*)"ATTRIBUT", 8, true);
     if (searcher == nullptr)
     {
         VBA_DEBUG(vba_data_trace, DEFAULT_TRACE_OPTION_ID, TRACE_ERROR_LEVEL, CURRENT_PACKET,
@@ -535,8 +532,6 @@ int32_t OleFile :: get_file_offset(const uint8_t* data, int32_t data_len)
     }
 
     int32_t offset = searcher->search(search_handle, data, data_len);
-    delete searcher;
-    snort::LiteralSearch::cleanup(search_handle);
     return offset;
 }
 
index e42c76ffcae3d5497b76908c77c48821d2526372..cd020f0eb0ff799deffd14387243ee0ef90da01c 100644 (file)
@@ -254,10 +254,8 @@ public:
 
     OleFile(const uint8_t* file_buf, const uint32_t buf_len)
     {
-        //header = new OleHeader;
         this->file_buf = file_buf;
         this->buf_len = buf_len;
-        //dir_list = new DirectoryList();
     }
 
     ~OleFile()
@@ -268,9 +266,6 @@ public:
         delete[] mini_fat_list;
     }
 
-    snort::LiteralSearch* searcher = nullptr;
-    snort::LiteralSearch::Handle* search_handle = nullptr;
-
 private:
     const uint8_t* file_buf;
     uint32_t buf_len;
index 0a23ab0a758bc766c508946fba76298fe9c8ee83..a20965e98fb0d16542cdd5999374495b6d1b1d19 100644 (file)
@@ -35,6 +35,9 @@
 
 THREAD_LOCAL const snort::Trace* vba_data_trace = nullptr;
 
+snort::LiteralSearch::Handle* search_handle = nullptr;
+const snort::LiteralSearch* searcher = nullptr ;
+
 namespace snort
 {
 LiteralSearch::Handle* LiteralSearch::setup() { return nullptr; }
index b5c784fd76230783c5dccf63f3ebc9fd54776ffe..0a3c6f7ff6f06ac13f017eb181f3f14c1f40a862 100644 (file)
@@ -29,6 +29,9 @@ using namespace snort;
 
 THREAD_LOCAL const Trace* vba_data_trace = nullptr;
 
+LiteralSearch::Handle* search_handle = nullptr;
+const LiteralSearch* searcher = nullptr;
+
 CursorActionType VbaDataOption::get_cursor_type() const
 { return CAT_SET_VBA; }
 
@@ -44,6 +47,32 @@ IpsOption::EvalStatus VbaDataOption::eval(Cursor& c, Packet* p)
     return MATCH;
 }
 
+bool VbaDataModule::end(const char*, int, SnortConfig*)
+{
+    if (!search_handle)
+        search_handle = LiteralSearch::setup();
+    
+    if (!searcher)
+        searcher = snort::LiteralSearch::instantiate(search_handle,
+            (const uint8_t*)"ATTRIBUT", 8, true);
+
+    return true;
+}
+
+VbaDataModule::~VbaDataModule()
+{
+    if (searcher)
+    {
+        delete searcher;
+        searcher = nullptr;
+    }
+
+    if (search_handle)
+    {
+        LiteralSearch::cleanup(search_handle);
+        search_handle = nullptr;
+    }
+}
 
 ProfileStats* VbaDataModule::get_profile() const
 { return &vbaDataPerfStats; }
index d75acaaec93b13bb7cb952d08dccebcef219a118..67b8d30a48a5daa7ab0d88c2e9826c0fcc92b428 100644 (file)
@@ -21,6 +21,7 @@
 #include "framework/cursor.h"
 #include "framework/ips_option.h"
 #include "framework/module.h"
+#include "helpers/literal_search.h"
 #include "profiler/profiler.h"
 #include "trace/trace.h"
 
@@ -32,6 +33,9 @@ static THREAD_LOCAL snort::ProfileStats vbaDataPerfStats;
 
 extern THREAD_LOCAL const snort::Trace* vba_data_trace;
 
+extern snort::LiteralSearch::Handle* search_handle ;
+extern const snort::LiteralSearch* searcher ;
+
 class VbaDataOption : public snort::IpsOption
 {
 public:
@@ -46,6 +50,9 @@ class VbaDataModule : public snort::Module
 {
 public:
     VbaDataModule() : Module(s_name, s_help) { }
+    ~VbaDataModule() override;
+
+    bool end(const char*, int, snort::SnortConfig*) override;
 
     snort::ProfileStats* get_profile() const override;