Merge in SNORT/snort3 from ~MDAGON/snort3:push_promise2 to master
Squashed commit of the following:
commit
f57c8f53f1fdfef5a73320471b8ef4369fba6f70
Author: Maya Dagon <mdagon@cisco.com>
Date: Mon Oct 25 14:52:44 2021 -0400
http2_inspect: push promise error state check
hpack_decoder = &session_data->hpack_decoder[source_id];
}
+bool Http2HeadersFrame::in_error_state() const
+{
+ return stream->get_state(source_id) == STREAM_ERROR;
+}
+
void Http2HeadersFrame::clear()
{
- if (session_data->abort_flow[source_id] || stream->get_state(source_id) == STREAM_ERROR)
+ if (session_data->abort_flow[source_id] || in_error_state())
return;
Packet dummy_pkt(false);
dummy_pkt.flow = session_data->flow;
bool decode_headers(Http2StartLine* start_line_generator, bool trailers);
void process_decoded_headers(HttpFlowData* http_flow, HttpCommon::SourceId hi_source_id);
uint8_t get_flags_mask() const override;
+ virtual bool in_error_state() const;
Field http1_header; // finalized headers to be passed to http_inspect
uint32_t xtradata_mask = 0;
session_data->stream_in_hi = NO_STREAM_ID;
session_data->processing_stream_id = NO_STREAM_ID;
session_data->processing_partial_header = false;
+ session_data->set_hi_msg_section(nullptr);
}
void Http2Inspect::show(const SnortConfig*) const
uint8_t Http2PushPromiseFrame::get_flags_mask() const
{ return (FLAG_END_HEADERS|FLAG_PADDED); }
+bool Http2PushPromiseFrame::in_error_state() const
+{
+ // valid_sequence failures set error on source_id side.
+ // Header processing errors set error on client side.
+ // If client side was already in error state, valid_sequence
+ // would have failed.
+ return stream->get_state(SRC_CLIENT) == STREAM_ERROR ||
+ stream->get_state(source_id) == STREAM_ERROR;
+}
+
+
#ifdef REG_TEST
void Http2PushPromiseFrame::print_frame(FILE* output)
{
HttpCommon::SourceId src_id, Http2Stream* stream);
uint8_t get_flags_mask() const override;
+ bool in_error_state() const override;
+
static const int32_t PROMISED_ID_LENGTH = 4;
};
#endif
if (session_data == nullptr)
{
- // assert(false); // FIXIT-M something wrong with H2I Push Promise triggers this.
+ assert(false);
return;
}