Fixed a memory leak in case of broken Extended Event Descriptors

This commit is contained in:
Klaus Schmidinger
2015-02-01 14:59:52 +01:00
parent 1c4865147a
commit 471b287f70
6 changed files with 21 additions and 14 deletions

View File

@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: si.c 3.1 2013/10/30 10:16:18 kls Exp $
* $Id: si.c 3.2 2015/02/01 14:55:27 kls Exp $
* *
***************************************************************************/
@@ -198,17 +198,18 @@ void DescriptorGroup::Delete() {
}
}
void DescriptorGroup::Add(GroupDescriptor *d) {
bool DescriptorGroup::Add(GroupDescriptor *d) {
if (!array) {
length=d->getLastDescriptorNumber()+1;
array=new GroupDescriptor*[length]; //numbering is zero-based
for (int i=0;i<length;i++)
array[i]=0;
} else if (length != d->getLastDescriptorNumber()+1)
return; //avoid crash in case of misuse
return false; //avoid crash in case of misuse
if (length <= d->getDescriptorNumber())
return; // see http://www.vdr-portal.de/board60-linux/board14-betriebssystem/board69-c-t-vdr/p1025777-segfault-mit-vdr-1-7-21/#post1025777
return false; // see http://www.vdr-portal.de/board60-linux/board14-betriebssystem/board69-c-t-vdr/p1025777-segfault-mit-vdr-1-7-21/#post1025777
array[d->getDescriptorNumber()]=d;
return true;
}
bool DescriptorGroup::isComplete() {

View File

@@ -6,7 +6,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: si.h 3.2 2014/02/08 14:11:32 kls Exp $
* $Id: si.h 3.3 2015/02/01 14:55:27 kls Exp $
* *
***************************************************************************/
@@ -483,7 +483,7 @@ class DescriptorGroup {
public:
DescriptorGroup(bool deleteOnDesctruction=true);
~DescriptorGroup();
void Add(GroupDescriptor *d);
bool Add(GroupDescriptor *d);
void Delete();
int getLength() { return length; }
GroupDescriptor **getDescriptors() { return array; }