diff --git a/CHANGES b/CHANGES index 76422d6035..22bd59e630 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,13 @@ +3.1.0-dev.143 | 2019-09-24 10:23:24 -0700 + + * Simplify reassembly code using DataBlockList::LastBlock() (Jon Siwek, Corelight) + + * Fix DataBlockList::DataSize() (Jon Siwek, Corelight) + + Parameters got filled opposite to what they were supposed to be and + also didn't consider cutoffs that land in the middle of a block. + 3.1.0-dev.141 | 2019-09-24 10:31:50 +0000 * Reorganize reassembly data structures. This replaces the previous diff --git a/VERSION b/VERSION index e6c39b46be..7565ce859e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.0-dev.141 +3.1.0-dev.143 diff --git a/src/Frag.cc b/src/Frag.cc index 4d1f7ace47..a39f2ea33e 100644 --- a/src/Frag.cc +++ b/src/Frag.cc @@ -205,7 +205,7 @@ void FragReassembler::BlockInserted(DataBlockMap::const_iterator /* it */) ++next; } - const auto& last = std::prev(block_list.End())->second; + const auto& last = block_list.LastBlock(); if ( next != block_list.End() ) { diff --git a/src/analyzer/protocol/tcp/TCP_Reassembler.cc b/src/analyzer/protocol/tcp/TCP_Reassembler.cc index e5b1250a05..947ebcd433 100644 --- a/src/analyzer/protocol/tcp/TCP_Reassembler.cc +++ b/src/analyzer/protocol/tcp/TCP_Reassembler.cc @@ -68,7 +68,7 @@ void TCP_Reassembler::Done() { // Record any undelivered data. if ( ! block_list.Empty() ) { - auto last_block = std::prev(block_list.End())->second; + const auto& last_block = block_list.LastBlock(); if ( last_reassem_seq < last_block.upper ) RecordToSeq(last_reassem_seq, last_block.upper, @@ -91,7 +91,7 @@ uint64_t TCP_Reassembler::NumUndeliveredBytes() const if ( block_list.Empty() ) return 0; - auto last_block = std::prev(block_list.End())->second; + const auto& last_block = block_list.LastBlock(); return last_block.upper - last_reassem_seq; } @@ -289,7 +289,7 @@ void TCP_Reassembler::MatchUndelivered(uint64_t up_to_seq, bool use_last_upper) if ( block_list.Empty() || ! rule_matcher ) return; - const auto& last_block = std::prev(block_list.End())->second; + const auto& last_block = block_list.LastBlock(); if ( use_last_upper ) up_to_seq = last_block.upper; diff --git a/src/file_analysis/FileReassembler.cc b/src/file_analysis/FileReassembler.cc index 6eb5453beb..ffc2fda54f 100644 --- a/src/file_analysis/FileReassembler.cc +++ b/src/file_analysis/FileReassembler.cc @@ -29,7 +29,7 @@ uint64_t FileReassembler::Flush() if ( block_list.Empty() ) return 0; - const auto& last_block = std::prev(block_list.End())->second; + const auto& last_block = block_list.LastBlock(); // This is expected to call back into FileReassembler::Undelivered(). flushing = true;