diff --git a/src/Reporter.cc b/src/Reporter.cc index 39d38dcee8..4cbc371873 100644 --- a/src/Reporter.cc +++ b/src/Reporter.cc @@ -380,6 +380,10 @@ bool Reporter::PermitFlowWeird(const char* name, bool Reporter::PermitExpiredConnWeird(const char* name, const RecordVal& conn_id) { + if ( !conn_id.HasField("orig_h") || !conn_id.HasField("resp_h") || + !conn_id.HasField("orig_p") || !conn_id.HadField("resp_p") ) + return false; + auto conn_tuple = std::make_tuple(conn_id.GetFieldAs("orig_h"), conn_id.GetFieldAs("resp_h"), conn_id.GetFieldAs("orig_p")->Port(), diff --git a/src/Val.h b/src/Val.h index ef04bfa206..7694532871 100644 --- a/src/Val.h +++ b/src/Val.h @@ -1202,6 +1202,18 @@ public: return (*record_val)[field] ? true : false; } + /** + * Returns true if the given field is in the record, false if + * it's missing. + * @param field The field name to retrieve. + * @return Whether there's a value for the given field name. + */ + bool HasField(const char *field) const + { + int idx = GetType()->AsRecordType()->FieldOffset(field); + return HasField(idx); + } + /** * Returns the value of a given field index. * @param field The field index to retrieve.