If a HTTP2 transaction gets freed before the end of the range
request, we need to have the files container which is in
the state, to transfer owernship of this file to the files
container.
Ticket: 4811
if tx.tx_id == tx_id + 1 {
found = true;
index = i;
+ // this should be in HTTP2Transaction::free
+ // but we need state's file container cf https://redmine.openinfosecfoundation.org/issues/4444
+ if !tx.file_range.is_null() {
+ match unsafe { SC } {
+ None => panic!("BUG no suricata_config"),
+ Some(c) => {
+ (c.HTPFileCloseHandleRange)(
+ &mut self.files.files_tc,
+ 0,
+ tx.file_range,
+ std::ptr::null_mut(),
+ 0,
+ );
+ (c.HttpRangeFreeBlock)(tx.file_range);
+ }
+ }
+ }
break;
}
}
/* HtpState owns the constructed file now */
FileContainerAdd(files, ranged);
}
+ DEBUG_VALIDATE_BUG_ON(ranged && !files);
THashDataUnlock(c->container->hdata);
}
}