]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1716 in SNORT/snort3 from ~KATHARVE/snort3:remove_pkt_data to...
authorMike Stepanek (mstepane) <mstepane@cisco.com>
Mon, 26 Aug 2019 13:33:26 +0000 (09:33 -0400)
committerMike Stepanek (mstepane) <mstepane@cisco.com>
Mon, 26 Aug 2019 13:33:26 +0000 (09:33 -0400)
Squashed commit of the following:

commit 616c7aee55b2e0a239577a3c6430ef0a11d13d22
Author: Mike Redden <miredden@cisco.com>
Date:   Fri Aug 16 13:25:49 2019 -0400

    http2_inspect: Remove pkt_data buffer option

src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc
src/service_inspectors/http2_inspect/test/http2_stream_splitter_impl_test.cc

index 331d2ff8845c865e424610c51b66fe0568089300..caa0080e851fc945a5f140f19d67fab220a49840 100644 (file)
@@ -118,28 +118,25 @@ const StreamBuffer implement_reassemble(Http2FlowData* session_data, unsigned to
         if (!session_data->header_coming[source_id])
         {
             session_data->frame_data[source_id] = session_data->frame[source_id];
-            frame_buf.data = session_data->frame_data[source_id];
             session_data->frame_data_size[source_id] = session_data->frame_size[source_id];
-            frame_buf.length = session_data->frame_data_size[source_id];
         }
         else if (session_data->frame_size[source_id] == FRAME_HEADER_LENGTH)
         {
             session_data->frame_data[source_id] = nullptr;
             session_data->frame_data_size[source_id] = 0;
-            // Don't send empty frame body to detection, use header so there is something
-            frame_buf.data = session_data->frame[source_id];
-            frame_buf.length = session_data->frame_size[source_id];
         }
         else
         {
             // Adjust for frame header
             session_data->frame_data[source_id] =
                 session_data->frame[source_id] + FRAME_HEADER_LENGTH;
-            frame_buf.data = session_data->frame_data[source_id];
             session_data->frame_data_size[source_id] =
                 session_data->frame_size[source_id] - FRAME_HEADER_LENGTH;
-            frame_buf.length = session_data->frame_data_size[source_id];
         }
+        // Return 0-length non-null buffer to stream which signals detection required, but don't 
+        // create pkt_data buffer
+        frame_buf.length = 0;
+        frame_buf.data = session_data->frame[source_id];
     }
     return frame_buf;
 }
index e922604142f463e8725c3b460032c0f98e4699a3..72313c15e37abac117c05964d3d75b78f22c35ed 100644 (file)
@@ -208,31 +208,31 @@ TEST_GROUP(http2_reassemble_test)
 TEST(http2_reassemble_test, basic_with_header)
 {
     session_data->set_header_coming(true, SRC_CLIENT);
-    const StreamBuffer buffer = implement_reassemble(session_data, 19, 0,
+    implement_reassemble(session_data, 19, 0,
         (const uint8_t*)"\x00\x00\x0A\x02\x00\x00\x00\x00\x00" "0123456789",
         19, PKT_PDU_TAIL, SRC_CLIENT);
-    CHECK(buffer.length == 10);
-    CHECK(memcmp(buffer.data, "0123456789", 10) == 0);
+    CHECK(session_data->get_frame_data_size(SRC_CLIENT) == 10);
+    CHECK(memcmp(session_data->get_frame_data(SRC_CLIENT), "0123456789", 10) == 0);
 }
 
 TEST(http2_reassemble_test, basic_with_header_s2c)
 {
     session_data->set_header_coming(true, SRC_SERVER);
-    const StreamBuffer buffer = implement_reassemble(session_data, 19, 0,
+    implement_reassemble(session_data, 19, 0,
         (const uint8_t*)"\x00\x00\x0A\x02\x00\x00\x00\x00\x00" "0123456789",
         19, PKT_PDU_TAIL, SRC_SERVER);
-    CHECK(buffer.length == 10);
-    CHECK(memcmp(buffer.data, "0123456789", 10) == 0);
+    CHECK(session_data->get_frame_data_size(SRC_SERVER) == 10);
+    CHECK(memcmp(session_data->get_frame_data(SRC_SERVER), "0123456789", 10) == 0);
 }
 
 TEST(http2_reassemble_test, basic_without_header)
 {
     session_data->set_header_coming(false, SRC_CLIENT);
-    const StreamBuffer buffer = implement_reassemble(session_data, 24, 0,
+    implement_reassemble(session_data, 24, 0,
         (const uint8_t*)"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n",
         24, PKT_PDU_TAIL, SRC_CLIENT);
-    CHECK(buffer.length == 24);
-    CHECK(memcmp(buffer.data, "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n", 24) == 0);
+    CHECK(session_data->get_frame_data_size(SRC_CLIENT) == 24);
+    CHECK(memcmp(session_data->get_frame_data(SRC_CLIENT), "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n", 24) == 0);
 }
 
 TEST(http2_reassemble_test, basic_three_pieces)
@@ -242,32 +242,33 @@ TEST(http2_reassemble_test, basic_three_pieces)
         (const uint8_t*)"\x00\x00\x0A\x02\x00\x00",
         6, 0, SRC_CLIENT);
     CHECK(buffer.length == 0);
-    CHECK(buffer.data == nullptr);
-    buffer = implement_reassemble(session_data, 19, 6,
+    CHECK(session_data->get_frame_data_size(SRC_CLIENT) == 0);
+    CHECK(session_data->get_frame_data(SRC_CLIENT) == nullptr);
+    implement_reassemble(session_data, 19, 6,
         (const uint8_t*)"\x00\x00\x00" "01234",
         8, 0, SRC_CLIENT);
-    CHECK(buffer.length == 0);
-    CHECK(buffer.data == nullptr);
+    CHECK(session_data->get_frame_data(SRC_CLIENT) == nullptr);
     buffer = implement_reassemble(session_data, 19, 14,
         (const uint8_t*)"56789",
         5, PKT_PDU_TAIL, SRC_CLIENT);
-    CHECK(buffer.length == 10);
-    CHECK(memcmp(buffer.data, "0123456789", 10) == 0);
+    CHECK(buffer.length == 0);
+    CHECK(session_data->get_frame_data_size(SRC_CLIENT) == 10);
+    CHECK(memcmp(session_data->get_frame_data(SRC_CLIENT), "0123456789", 10) == 0);
 }
 
 TEST(http2_reassemble_test, basic_without_header_two_pieces)
 {
     session_data->set_header_coming(false, SRC_CLIENT);
-    StreamBuffer buffer = implement_reassemble(session_data, 24, 0,
+    implement_reassemble(session_data, 24, 0,
         (const uint8_t*)"P",
         1, 0, SRC_CLIENT);
-    CHECK(buffer.length == 0);
-    CHECK(buffer.data == nullptr);
-    buffer = implement_reassemble(session_data, 24, 1,
+    CHECK(session_data->get_frame_data_size(SRC_CLIENT) == 0);
+    CHECK(session_data->get_frame_data(SRC_CLIENT) == nullptr);
+     implement_reassemble(session_data, 24, 1,
         (const uint8_t*)"RI * HTTP/2.0\r\n\r\nSM\r\n\r\n",
         23, PKT_PDU_TAIL, SRC_CLIENT);
-    CHECK(buffer.length == 24);
-    CHECK(memcmp(buffer.data, "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n", 24) == 0);
+    CHECK(session_data->get_frame_data_size(SRC_CLIENT) == 24);
+    CHECK(memcmp(session_data->get_frame_data(SRC_CLIENT), "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n", 24) == 0);
 }
 
 int main(int argc, char** argv)