return;
}
- const int32_t fp_length = (file_data.length() <= session_data->file_depth_remaining[source_id])
- ? file_data.length() : session_data->file_depth_remaining[source_id];
-
if (!session_data->mime_state[source_id])
{
+ const int32_t fp_length = (file_data.length() <=
+ session_data->file_depth_remaining[source_id]) ?
+ file_data.length() : session_data->file_depth_remaining[source_id];
+
FileFlows* file_flows = FileFlows::get_file_flows(flow);
if (!file_flows)
return;
else
{
session_data->mime_state[source_id]->process_mime_data(p, file_data.start(),
- fp_length, true, SNORT_FILE_POSITION_UNKNOWN);
-
- session_data->file_depth_remaining[source_id] -= fp_length;
- if (session_data->file_depth_remaining[source_id] == 0)
- {
- delete session_data->mime_state[source_id];
- session_data->mime_state[source_id] = nullptr;
- }
+ file_data.length(), true, SNORT_FILE_POSITION_UNKNOWN);
}
}
void HttpMsgHeader::setup_file_processing()
{
- // Generate the unique file id for file processing
- transaction->set_file_processing_id(source_id, get_transaction_id(),
- get_h2_stream_id(source_id));
-
- if ((session_data->file_depth_remaining[source_id] = FileService::get_max_file_depth()) < 0)
+ const int64_t max_file_depth = FileService::get_max_file_depth();
+ if (max_file_depth <= 0)
{
session_data->file_depth_remaining[source_id] = 0;
return;
}
+ // Generate the unique file id for file processing
+ transaction->set_file_processing_id(source_id, get_transaction_id(),
+ get_h2_stream_id(source_id));
+
// Do we meet all the conditions for MIME file processing?
if (source_id == SRC_CLIENT)
{
SNORT_FILE_POSITION_UNKNOWN);
session_data->mime_state[source_id]->process_mime_data(p,
(const uint8_t*)"\r\n", 2, true, SNORT_FILE_POSITION_UNKNOWN);
+ session_data->file_depth_remaining[source_id] = INT64_MAX;
}
}
}
// Otherwise do regular file processing
if (session_data->mime_state[source_id] == nullptr)
{
+ session_data->file_depth_remaining[source_id] = max_file_depth;
FileFlows* file_flows = FileFlows::get_file_flows(flow);
if (!file_flows)
session_data->file_depth_remaining[source_id] = 0;