]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
ensure inspector::clear called only after eval
authorRuss Combs <rucombs@cisco.com>
Fri, 10 Apr 2015 12:38:44 +0000 (08:38 -0400)
committerRuss Combs <rucombs@cisco.com>
Fri, 10 Apr 2015 12:38:44 +0000 (08:38 -0400)
src/managers/inspector_manager.cc
src/stream/tcp/tcp_session.cc

index 96a7148a1571998c37d8341370a1800d6e2930f4..813ba63d073e9ba2111c5256cbbc4bfa717f8c43 100644 (file)
@@ -132,6 +132,7 @@ typedef list<Inspector*> 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;
 }
 
index 3238af9490aad450456a337b6164d7c2022778cb..9d0a74fe34f1ff330e1718df2b4b596a63637dc5 100644 (file)
@@ -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;