From 107737c9a043dccb9a1394496bfc74f71222bc59 Mon Sep 17 00:00:00 2001 From: Johanna Amann Date: Mon, 8 Feb 2016 15:38:09 -0800 Subject: [PATCH] Fix memory leaks in stats.cc and smb.cc No test for smb leak because I don't have anything that triggers this. --- src/Stats.cc | 8 ++++++-- src/analyzer/protocol/smb/SMB.cc | 4 +++- testing/btest/core/leaks/stats.bro | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 testing/btest/core/leaks/stats.bro diff --git a/src/Stats.cc b/src/Stats.cc index 00f603cba7..eb5ac67e26 100644 --- a/src/Stats.cc +++ b/src/Stats.cc @@ -362,12 +362,16 @@ SampleLogger::~SampleLogger() void SampleLogger::FunctionSeen(const Func* func) { - load_samples->Assign(new StringVal(func->Name()), 0); + Val* idx = new StringVal(func->Name()); + load_samples->Assign(idx, 0); + Unref(idx); } void SampleLogger::LocationSeen(const Location* loc) { - load_samples->Assign(new StringVal(loc->filename), 0); + Val* idx = new StringVal(loc->filename); + load_samples->Assign(idx, 0); + Unref(idx); } void SampleLogger::SegmentProfile(const char* /* name */, diff --git a/src/analyzer/protocol/smb/SMB.cc b/src/analyzer/protocol/smb/SMB.cc index 9d388a0886..f72dbf4e19 100644 --- a/src/analyzer/protocol/smb/SMB.cc +++ b/src/analyzer/protocol/smb/SMB.cc @@ -336,7 +336,9 @@ int SMB_Session::ParseNegotiate(binpac::SMB::SMB_header const& hdr, { binpac::SMB::SMB_dialect* d = (*msg.dialects())[i]; BroString* tmp = ExtractString(d->dialectname()); - t->Assign(new Val(i, TYPE_COUNT), new StringVal(tmp)); + Val* idx = new Val(i, TYPE_COUNT); + t->Assign(idx, new StringVal(tmp)); + Unref(idx); } val_list* vl = new val_list; diff --git a/testing/btest/core/leaks/stats.bro b/testing/btest/core/leaks/stats.bro new file mode 100644 index 0000000000..a3459fdc93 --- /dev/null +++ b/testing/btest/core/leaks/stats.bro @@ -0,0 +1,15 @@ +# Needs perftools support. +# +# @TEST-GROUP: leaks +# +# @TEST-REQUIRES: bro --help 2>&1 | grep -q mem-leaks +# +# @TEST-EXEC: HEAP_CHECK_DUMP_DIRECTORY=. HEAPCHECK=local btest-bg-run bro bro -m -r $TRACES/wikipedia.trace %INPUT +# @TEST-EXEC: btest-bg-wait 60 + +@load policy/misc/stats.bro + +event load_sample(samples: load_sample_info, CPU: interval, dmem: int) + { + print CPU; + }