From: Russ Combs Date: Fri, 10 Apr 2015 12:38:44 +0000 (-0400) Subject: ensure inspector::clear called only after eval X-Git-Tag: 3.0.0-233~1002 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d54c0fa2b606315bce4ce8315bedbdf4a36a4326;p=thirdparty%2Fsnort3.git ensure inspector::clear called only after eval --- diff --git a/src/managers/inspector_manager.cc b/src/managers/inspector_manager.cc index 96a7148a1..813ba63d0 100644 --- a/src/managers/inspector_manager.cc +++ b/src/managers/inspector_manager.cc @@ -132,6 +132,7 @@ typedef list PHList; static PHGlobalList s_handlers; static PHList s_trash; +static THREAD_LOCAL bool s_clear = false; struct FrameworkConfig { @@ -693,7 +694,10 @@ void InspectorManager::full_inspection(FrameworkPolicy* fp, Packet* p) // FIXIT-M need list of gadgets for ambiguous wizardry else if ( flow->gadget && PacketHasPAFPayload(p) ) + { flow->gadget->eval(p); + s_clear = true; + } } void InspectorManager::execute(Packet* p) @@ -718,7 +722,12 @@ void InspectorManager::execute(Packet* p) void InspectorManager::clear(Packet* p) { - if ( p->flow && p->flow->gadget ) + if ( !s_clear ) + return; + + if ( p->flow and p->flow->gadget ) p->flow->gadget->clear(p); + + s_clear = false; } diff --git a/src/stream/tcp/tcp_session.cc b/src/stream/tcp/tcp_session.cc index 3238af949..9d0a74fe3 100644 --- a/src/stream/tcp/tcp_session.cc +++ b/src/stream/tcp/tcp_session.cc @@ -2008,20 +2008,8 @@ static int FlushStream( ) flags |= PKT_PDU_TAIL; - const StreamBuffer* sb = nullptr; - - // FIXIT-M force handling to work around nhttp - if ( st->flags & TF_FORCE_FLUSH ) - { - memcpy(flushbuf, ss->payload, bytes_to_copy); - s5_pkt->dsize += bytes_to_copy; - bytes_copied = bytes_to_copy; - } - else - { - sb = st->splitter->reassemble( - p->flow, total, bytes_flushed, ss->payload, bytes_to_copy, flags, bytes_copied); - } + const StreamBuffer* sb = st->splitter->reassemble( + p->flow, total, bytes_flushed, ss->payload, bytes_to_copy, flags, bytes_copied); flags = 0;