[Bro-Dev] Memory Leak in find_all()?
Robin Sommer
robin at icir.org
Tue Feb 2 08:55:18 PST 2016
Mind filing this as a ticket? That ensures it doesn't get lost.
Robin
On Tue, Feb 02, 2016 at 17:48 +0100, you wrote:
> Ok,
>
> here we go (cf. attachment).
>
> With my older state (2.3.XXX) of bro, all tests still are green after the
> patch.
>
> The patch applies cleanly also to the current git head, but there I didn't
> execute the test suite.
>
> Best regards,
>
> Dirk
>
> On 02.02.2016 17:21, Robin Sommer wrote:
> >
> >On Tue, Feb 02, 2016 at 16:33 +0100, you wrote:
> >
> >> Val* ma = new StringVal(n, (const char*) t);
> >> a->Assign(ma, 0);
> >> Unref(ma);
> >>Is my observation correct?
> >It is, good catch. Assign() take ownership of the value (0 in this
> >case), but not of the index. Yes, please send a patch for this one and
> >other instances you find. Thanks,
> >
> >Robin
> >
>
> --
>
> Dr.-Ing. Dirk Leinenbach - Leitung Softwareentwicklung
> consistec Engineering & Consulting GmbH
> ------------------------------------------------------------------
>
> Europaallee 5 Fon: +49 (0)681 / 959044-0
> D-66113 Saarbrücken Fax: +49 (0)681 / 959044-11
> http://www.consistec.de e-mail: dirk.leinenbach at consistec.de
>
> Registergericht: Amtsgericht Saarbrücken
> Registerblatt: HRB12003
> Geschäftsführer: Dr. Thomas Sinnwell, Volker Leiendecker, Stefan Sinnwell
>
> From f0f66eedcd236966e1bde04afa95b4cf11cc4328 Mon Sep 17 00:00:00 2001
> From: Dirk Leinenbach <dirk.leinenbach at consistec.de>
> Date: Tue, 2 Feb 2016 17:33:50 +0100
> Subject: [PATCH] fix memory leaks in find_all() and IRC analyzer
>
> ---
> src/analyzer/protocol/irc/IRC.cc | 4 +++-
> src/strings.bif | 4 +++-
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/src/analyzer/protocol/irc/IRC.cc b/src/analyzer/protocol/irc/IRC.cc
> index 96449ea..0fe9bcd 100644
> --- a/src/analyzer/protocol/irc/IRC.cc
> +++ b/src/analyzer/protocol/irc/IRC.cc
> @@ -268,7 +268,9 @@ void IRC_Analyzer::DeliverStream(int length, const u_char* line, bool orig)
> {
> if ( parts[i][0] == '@' )
> parts[i] = parts[i].substr(1);
> - set->Assign(new StringVal(parts[i].c_str()), 0);
> + Val* idx = new StringVal(parts[i].c_str());
> + set->Assign(idx, 0);
> + Unref(idx);
> }
> vl->append(set);
>
> diff --git a/src/strings.bif b/src/strings.bif
> index ebee7d9..914baae 100644
> --- a/src/strings.bif
> +++ b/src/strings.bif
> @@ -1161,7 +1161,9 @@ function find_all%(str: string, re: pattern%) : string_set
> int n = re->MatchPrefix(t, e - t);
> if ( n >= 0 )
> {
> - a->Assign(new StringVal(n, (const char*) t), 0);
> + Val* idx = new StringVal(n, (const char*) t);
> + a->Assign(idx, 0);
> + Unref(idx);
> t += n - 1;
> }
> }
--
Robin Sommer * ICSI/LBNL * robin at icir.org * www.icir.org/robin
More information about the bro-dev
mailing list