void FileContext::log_file_event(Flow* flow, FilePolicyBase* policy)
{
- // log file event either when filename is set or if it is a asymmetric flow
+ // log file event either when filename is set or if it is a asymmetric flow
if ( is_file_name_set() or !flow->two_way_traffic() )
{
bool log_needed = true;
{
verdict = FILE_VERDICT_UNKNOWN;
processing_complete = false;
- set_file_size(0);
reset_sha();
- if (is_file_name_set())
- unset_file_name();
pending_expire_time.tv_sec = 0;
pending_expire_time.tv_usec = 0;
}
{
verdict = FILE_VERDICT_UNKNOWN;
processing_complete = false;
- set_file_size(0);
reset_sha();
- if (is_file_name_set())
- unset_file_name();
remove_segments();
}
info.verdict = FILE_VERDICT_BLOCK;
info.processing_complete = true;
info.set_file_name("test", 4);
+ info.set_file_size(123);
info.reset();
CHECK (false == info.processing_complete);
CHECK (FILE_VERDICT_UNKNOWN == info.verdict);
- CHECK (false == info.is_file_name_set());
+ CHECK (true == info.is_file_name_set());
+ CHECK (std::string("test") == info.get_file_name());
+ CHECK (123 == info.get_file_size());
}
TEST_CASE ("re_eval", "[file_info]")
}
bool is_new_context = false;
if (ftracker->file_name_hash)
- return file_flows->get_file_context(ftracker->file_name_hash, to_create, is_new_context, ftracker->file_id);
+ return file_flows->get_file_context(ftracker->file_name_hash, to_create, is_new_context, ftracker->file_id);
return file_flows->get_file_context(ftracker->file_id, to_create, is_new_context);
}
{
FileContext* file = DCE2_Smb2GetFileContext(ssd, ftracker, true);
if (file)
- file->set_file_size(!ftracker->file_size ? UNKNOWN_FILE_SIZE : ftracker->file_size);
+ {
+ //preserve cached file_size when ftracker->file_size=0
+ if (ftracker->file_size != 0)
+ file->set_file_size(ftracker->file_size);
+ else if (file->get_file_size() == 0)
+ file->set_file_size(UNKNOWN_FILE_SIZE);
+ }
}
if (!DCE2_Smb2ProcessFileData(ssd, file_data, data_size))
return;