mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 02:28:21 +00:00
Refactor Analyzer::AddChildAnalyzer and usages.
Make feedback available regarding whether adding a child analyzer fails because one of the same type already exists (so one can avoid invalid pointer access of a delete'd analyzer).
This commit is contained in:
parent
bb8f102b2c
commit
a3b963ad4e
4 changed files with 19 additions and 15 deletions
|
@ -378,13 +378,13 @@ void Analyzer::ForwardEndOfData(bool orig)
|
|||
AppendNewChildren();
|
||||
}
|
||||
|
||||
void Analyzer::AddChildAnalyzer(Analyzer* analyzer, bool init)
|
||||
bool Analyzer::AddChildAnalyzer(Analyzer* analyzer, bool init)
|
||||
{
|
||||
if ( HasChildAnalyzer(analyzer->GetAnalyzerTag()) )
|
||||
{
|
||||
analyzer->Done();
|
||||
delete analyzer;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
// We add new children to new_children first. They are then
|
||||
|
@ -401,6 +401,7 @@ void Analyzer::AddChildAnalyzer(Analyzer* analyzer, bool init)
|
|||
|
||||
DBG_LOG(DBG_ANALYZER, "%s added child %s",
|
||||
fmt_analyzer(this).c_str(), fmt_analyzer(analyzer).c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
Analyzer* Analyzer::AddChildAnalyzer(Tag analyzer)
|
||||
|
@ -409,10 +410,8 @@ Analyzer* Analyzer::AddChildAnalyzer(Tag analyzer)
|
|||
{
|
||||
Analyzer* a = analyzer_mgr->InstantiateAnalyzer(analyzer, conn);
|
||||
|
||||
if ( a )
|
||||
AddChildAnalyzer(a);
|
||||
|
||||
return a;
|
||||
if ( a && AddChildAnalyzer(a) )
|
||||
return a;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -353,9 +353,10 @@ public:
|
|||
* discarded.
|
||||
*
|
||||
* @param analyzer The ananlyzer to add. Takes ownership.
|
||||
* @return false if analyzer type was already a child, else true.
|
||||
*/
|
||||
void AddChildAnalyzer(Analyzer* analyzer)
|
||||
{ AddChildAnalyzer(analyzer, true); }
|
||||
bool AddChildAnalyzer(Analyzer* analyzer)
|
||||
{ return AddChildAnalyzer(analyzer, true); }
|
||||
|
||||
/**
|
||||
* Adds a new child analyzer to the analyzer tree. If an analyzer of
|
||||
|
@ -363,6 +364,7 @@ public:
|
|||
* discarded.
|
||||
*
|
||||
* @param tag The type of analyzer to add.
|
||||
* @return the new analyzer instance that was added.
|
||||
*/
|
||||
Analyzer* AddChildAnalyzer(Tag tag);
|
||||
|
||||
|
@ -600,8 +602,9 @@ protected:
|
|||
* @param analyzer The analyzer to add. Takes ownership.
|
||||
*
|
||||
* @param init If true, Init() will be calle.d
|
||||
* @return false if analyzer type was already a child, else true.
|
||||
*/
|
||||
void AddChildAnalyzer(Analyzer* analyzer, bool init);
|
||||
bool AddChildAnalyzer(Analyzer* analyzer, bool init);
|
||||
|
||||
/**
|
||||
* Inits all child analyzers. This is an internal method.
|
||||
|
|
|
@ -137,10 +137,8 @@ int Gnutella_Analyzer::IsHTTP(string header)
|
|||
|
||||
analyzer::Analyzer* a = analyzer_mgr->InstantiateAnalyzer("HTTP", Conn());
|
||||
|
||||
if ( a )
|
||||
if ( a && Parent()->AddChildAnalyzer(a) )
|
||||
{
|
||||
Parent()->AddChildAnalyzer(a);
|
||||
|
||||
if ( Parent()->IsAnalyzer("TCP") )
|
||||
{
|
||||
// Replay buffered data.
|
||||
|
|
|
@ -62,9 +62,13 @@ void SOCKS_Analyzer::DeliverStream(int len, const u_char* data, bool orig)
|
|||
if ( ! pia )
|
||||
{
|
||||
pia = new pia::PIA_TCP(Conn());
|
||||
AddChildAnalyzer(pia);
|
||||
pia->FirstPacket(true, 0);
|
||||
pia->FirstPacket(false, 0);
|
||||
if ( AddChildAnalyzer(pia) )
|
||||
{
|
||||
pia->FirstPacket(true, 0);
|
||||
pia->FirstPacket(false, 0);
|
||||
}
|
||||
else
|
||||
pia = 0;
|
||||
}
|
||||
|
||||
ForwardStream(len, data, orig);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue