[Bro-Dev] Memory Leak in find_all()?

Dirk Leinenbach dirk.leinenbach at consistec.de
Tue Feb 2 11:00:37 PST 2016


Sure: https://bro-tracker.atlassian.net/projects/BIT/issues/BIT-1532

On 02.02.2016 17:55, Robin Sommer wrote:
> 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;
>>   			}
>>   		}
>

-- 

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



More information about the bro-dev mailing list