Fix undefined behavior via invalid TCP analyzer cast

A connection's root analyzer isn't necessarily TCP and an unchecked
C-style cast is undefined behavior in those cases.
This commit is contained in:
Jon Siwek 2019-07-26 18:17:44 -07:00
parent 0f5082585d
commit 2e9f6bec76

View file

@ -1051,9 +1051,9 @@ void NetSessions::Remove(Connection* c)
{ {
c->CancelTimers(); c->CancelTimers();
analyzer::tcp::TCP_Analyzer* ta = (analyzer::tcp::TCP_Analyzer*) c->GetRootAnalyzer(); if ( c->ConnTransport() == TRANSPORT_TCP )
if ( ta && c->ConnTransport() == TRANSPORT_TCP )
{ {
auto ta = static_cast<analyzer::tcp::TCP_Analyzer*>(c->GetRootAnalyzer());
assert(ta->IsAnalyzer("TCP")); assert(ta->IsAnalyzer("TCP"));
analyzer::tcp::TCP_Endpoint* to = ta->Orig(); analyzer::tcp::TCP_Endpoint* to = ta->Orig();
analyzer::tcp::TCP_Endpoint* tr = ta->Resp(); analyzer::tcp::TCP_Endpoint* tr = ta->Resp();