]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2600 in SNORT/snort3 from ~MDAGON/snort3:h2i_const to master
authorMike Stepanek (mstepane) <mstepane@cisco.com>
Thu, 5 Nov 2020 21:26:10 +0000 (21:26 +0000)
committerMike Stepanek (mstepane) <mstepane@cisco.com>
Thu, 5 Nov 2020 21:26:10 +0000 (21:26 +0000)
Squashed commit of the following:

commit 13312b5b7633695aae4db9b8e929d2ee1e2076fe
Author: mdagon <mdagon@cisco.com>
Date:   Thu Nov 5 10:16:18 2020 -0500

    http2_inspect: remove const cast

src/service_inspectors/http2_inspect/http2_data_cutter.cc
src/service_inspectors/http2_inspect/http2_flow_data.h
src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc

index e8f6a150736b50e2e603b384a7ba3620dd105948..8e3ef843d74a6d0a678d8492949f4831a54ca1ff 100644 (file)
@@ -220,7 +220,7 @@ void Http2DataCutter::reassemble(const uint8_t* data, unsigned len)
 
             if (frame_buf.data != nullptr)
             {
-                session_data->frame_data[source_id] = const_cast <uint8_t*>(frame_buf.data);
+                session_data->frame_data[source_id] = frame_buf.data;
                 session_data->frame_data_size[source_id] = frame_buf.length;
                 bytes_sent_http = 0;
                 reassemble_bytes_sent = 0;
index 962a14154a86e9bf5e4dd006133677785173afb4..87a05c71206038e9d829703f3498dcb124c3ea2b 100644 (file)
@@ -140,7 +140,7 @@ protected:
 
     // Reassemble() data to eval()
     uint8_t lead_frame_header[2][Http2Enums::FRAME_HEADER_LENGTH];
-    uint8_t* frame_data[2] = { nullptr, nullptr };
+    const uint8_t* frame_data[2] = { nullptr, nullptr };
     uint32_t frame_data_size[2] = { 0, 0 };
 
     // Used in eval()
@@ -181,6 +181,7 @@ protected:
     bool read_frame_header[2] = { false, false };
     bool continuation_frame[2] = { false, false };
     bool read_padding_len[2] = { false, false };
+    uint8_t* frame_reassemble[2] = { nullptr, nullptr };
 
 #ifdef REG_TEST
     static uint64_t instance_count;
index bb6412e284617f071cc5e68c590c6c4bf6952a71..e765d4f7962a3e1ee9cd73cfea0236809ed6a89f 100644 (file)
@@ -391,7 +391,7 @@ const StreamBuffer Http2StreamSplitter::implement_reassemble(Http2FlowData* sess
             session_data->frame_data_size[source_id] =
                 total - (session_data->frame_lengths[source_id].size() * FRAME_HEADER_LENGTH);
             if (session_data->frame_data_size[source_id] > 0)
-                session_data->frame_data[source_id] = new uint8_t[
+                session_data->frame_reassemble[source_id] = new uint8_t[
                     session_data->frame_data_size[source_id]];
 
             session_data->frame_data_offset[source_id] = 0;
@@ -459,7 +459,7 @@ const StreamBuffer Http2StreamSplitter::implement_reassemble(Http2FlowData* sess
                 remaining_frame_payload : len - data_offset;
             if (octets_to_copy > 0)
             {
-                memcpy(session_data->frame_data[source_id] +
+                memcpy(session_data->frame_reassemble[source_id] +
                     session_data->frame_data_offset[source_id],
                     data + data_offset, octets_to_copy);
             }
@@ -493,6 +493,12 @@ const StreamBuffer Http2StreamSplitter::implement_reassemble(Http2FlowData* sess
         session_data->total_bytes_in_split[source_id] = 0;
         session_data->scan_octets_seen[source_id] = 0;
 
+        if (session_data->frame_type[source_id] != FT_DATA)
+        {
+            session_data->frame_data[source_id] = session_data->frame_reassemble[source_id];
+            session_data->frame_reassemble[source_id] = nullptr;
+        }
+
         // Return 0-length non-null buffer to stream which signals detection required, but don't
         // create pkt_data buffer
         frame_buf.data = (const uint8_t*)"";