From 891f4ac4d7795a7f3b2a96d64b4c5021a7195c32 Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Sat, 22 Aug 2015 10:57:45 -0700 Subject: [PATCH] Fixes #98: Erase streams when they're reassembed on IPv4Reassembler --- src/ip_reassembler.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ip_reassembler.cpp b/src/ip_reassembler.cpp index ec481a8..c3120f8 100644 --- a/src/ip_reassembler.cpp +++ b/src/ip_reassembler.cpp @@ -102,14 +102,16 @@ IPv4Reassembler::packet_status IPv4Reassembler::process(PDU &pdu) { if(ip && ip->inner_pdu()) { // There's fragmentation if(ip->is_fragmented()) { + key_type key = make_key(ip); // Create it or look it up, it's the same - Internals::IPv4Stream &stream = streams[make_key(ip)]; + Internals::IPv4Stream &stream = streams[key]; stream.add_fragment(ip); if(stream.is_complete()) { PDU *pdu = stream.allocate_pdu(); + // Erase this stream, since it's already assembled + streams.erase(key); // The packet is corrupt if(!pdu) { - streams.erase(make_key(ip)); return FRAGMENTED; } ip->inner_pdu(pdu);