From: Mike Stepanek (mstepane) Date: Thu, 5 Nov 2020 21:26:10 +0000 (+0000) Subject: Merge pull request #2600 in SNORT/snort3 from ~MDAGON/snort3:h2i_const to master X-Git-Tag: 3.0.3-5~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0fed2ca43163c16e68aad8c398eef9fae156ca7;p=thirdparty%2Fsnort3.git Merge pull request #2600 in SNORT/snort3 from ~MDAGON/snort3:h2i_const to master Squashed commit of the following: commit 13312b5b7633695aae4db9b8e929d2ee1e2076fe Author: mdagon Date: Thu Nov 5 10:16:18 2020 -0500 http2_inspect: remove const cast --- diff --git a/src/service_inspectors/http2_inspect/http2_data_cutter.cc b/src/service_inspectors/http2_inspect/http2_data_cutter.cc index e8f6a1507..8e3ef843d 100644 --- a/src/service_inspectors/http2_inspect/http2_data_cutter.cc +++ b/src/service_inspectors/http2_inspect/http2_data_cutter.cc @@ -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 (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; diff --git a/src/service_inspectors/http2_inspect/http2_flow_data.h b/src/service_inspectors/http2_inspect/http2_flow_data.h index 962a14154..87a05c712 100644 --- a/src/service_inspectors/http2_inspect/http2_flow_data.h +++ b/src/service_inspectors/http2_inspect/http2_flow_data.h @@ -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; 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 bb6412e28..e765d4f79 100644 --- a/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc +++ b/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc @@ -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*)"";