From: Mike Stepanek (mstepane) Date: Mon, 26 Aug 2019 13:33:26 +0000 (-0400) Subject: Merge pull request #1716 in SNORT/snort3 from ~KATHARVE/snort3:remove_pkt_data to... X-Git-Tag: 3.0.0-260~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6aacb41047d7ef53b2a5ef0aaae74b8343511a8a;p=thirdparty%2Fsnort3.git Merge pull request #1716 in SNORT/snort3 from ~KATHARVE/snort3:remove_pkt_data to master Squashed commit of the following: commit 616c7aee55b2e0a239577a3c6430ef0a11d13d22 Author: Mike Redden Date: Fri Aug 16 13:25:49 2019 -0400 http2_inspect: Remove pkt_data buffer option --- diff --git a/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc b/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc index 331d2ff88..caa0080e8 100644 --- a/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc +++ b/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc @@ -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; } diff --git a/src/service_inspectors/http2_inspect/test/http2_stream_splitter_impl_test.cc b/src/service_inspectors/http2_inspect/test/http2_stream_splitter_impl_test.cc index e92260414..72313c15e 100644 --- a/src/service_inspectors/http2_inspect/test/http2_stream_splitter_impl_test.cc +++ b/src/service_inspectors/http2_inspect/test/http2_stream_splitter_impl_test.cc @@ -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)