mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 10:38:20 +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();
|
AppendNewChildren();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Analyzer::AddChildAnalyzer(Analyzer* analyzer, bool init)
|
bool Analyzer::AddChildAnalyzer(Analyzer* analyzer, bool init)
|
||||||
{
|
{
|
||||||
if ( HasChildAnalyzer(analyzer->GetAnalyzerTag()) )
|
if ( HasChildAnalyzer(analyzer->GetAnalyzerTag()) )
|
||||||
{
|
{
|
||||||
analyzer->Done();
|
analyzer->Done();
|
||||||
delete analyzer;
|
delete analyzer;
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We add new children to new_children first. They are then
|
// 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",
|
DBG_LOG(DBG_ANALYZER, "%s added child %s",
|
||||||
fmt_analyzer(this).c_str(), fmt_analyzer(analyzer).c_str());
|
fmt_analyzer(this).c_str(), fmt_analyzer(analyzer).c_str());
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Analyzer* Analyzer::AddChildAnalyzer(Tag analyzer)
|
Analyzer* Analyzer::AddChildAnalyzer(Tag analyzer)
|
||||||
|
@ -409,10 +410,8 @@ Analyzer* Analyzer::AddChildAnalyzer(Tag analyzer)
|
||||||
{
|
{
|
||||||
Analyzer* a = analyzer_mgr->InstantiateAnalyzer(analyzer, conn);
|
Analyzer* a = analyzer_mgr->InstantiateAnalyzer(analyzer, conn);
|
||||||
|
|
||||||
if ( a )
|
if ( a && AddChildAnalyzer(a) )
|
||||||
AddChildAnalyzer(a);
|
return a;
|
||||||
|
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -353,9 +353,10 @@ public:
|
||||||
* discarded.
|
* discarded.
|
||||||
*
|
*
|
||||||
* @param analyzer The ananlyzer to add. Takes ownership.
|
* @param analyzer The ananlyzer to add. Takes ownership.
|
||||||
|
* @return false if analyzer type was already a child, else true.
|
||||||
*/
|
*/
|
||||||
void AddChildAnalyzer(Analyzer* analyzer)
|
bool AddChildAnalyzer(Analyzer* analyzer)
|
||||||
{ AddChildAnalyzer(analyzer, true); }
|
{ return AddChildAnalyzer(analyzer, true); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a new child analyzer to the analyzer tree. If an analyzer of
|
* Adds a new child analyzer to the analyzer tree. If an analyzer of
|
||||||
|
@ -363,6 +364,7 @@ public:
|
||||||
* discarded.
|
* discarded.
|
||||||
*
|
*
|
||||||
* @param tag The type of analyzer to add.
|
* @param tag The type of analyzer to add.
|
||||||
|
* @return the new analyzer instance that was added.
|
||||||
*/
|
*/
|
||||||
Analyzer* AddChildAnalyzer(Tag tag);
|
Analyzer* AddChildAnalyzer(Tag tag);
|
||||||
|
|
||||||
|
@ -600,8 +602,9 @@ protected:
|
||||||
* @param analyzer The analyzer to add. Takes ownership.
|
* @param analyzer The analyzer to add. Takes ownership.
|
||||||
*
|
*
|
||||||
* @param init If true, Init() will be calle.d
|
* @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.
|
* 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());
|
analyzer::Analyzer* a = analyzer_mgr->InstantiateAnalyzer("HTTP", Conn());
|
||||||
|
|
||||||
if ( a )
|
if ( a && Parent()->AddChildAnalyzer(a) )
|
||||||
{
|
{
|
||||||
Parent()->AddChildAnalyzer(a);
|
|
||||||
|
|
||||||
if ( Parent()->IsAnalyzer("TCP") )
|
if ( Parent()->IsAnalyzer("TCP") )
|
||||||
{
|
{
|
||||||
// Replay buffered data.
|
// Replay buffered data.
|
||||||
|
|
|
@ -62,9 +62,13 @@ void SOCKS_Analyzer::DeliverStream(int len, const u_char* data, bool orig)
|
||||||
if ( ! pia )
|
if ( ! pia )
|
||||||
{
|
{
|
||||||
pia = new pia::PIA_TCP(Conn());
|
pia = new pia::PIA_TCP(Conn());
|
||||||
AddChildAnalyzer(pia);
|
if ( AddChildAnalyzer(pia) )
|
||||||
pia->FirstPacket(true, 0);
|
{
|
||||||
pia->FirstPacket(false, 0);
|
pia->FirstPacket(true, 0);
|
||||||
|
pia->FirstPacket(false, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pia = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ForwardStream(len, data, orig);
|
ForwardStream(len, data, orig);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue