Moin!
Hier der im anderen Thread versprochene Patch.
Beim Parsen des ExtendedEventDescriptor wurde manchmal vergessen, das Objekt zu löschen, falls es nicht zu dem Array hinzugefügt wurde.
Hier zur Ansicht, im Anhang als Datei:
Diff
diff --git a/eit.c b/eit.c
index 30c017b..031fc93 100644
--- a/eit.c
+++ b/eit.c
@@ -136,8 +136,8 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
UseExtendedEventDescriptor = true;
}
if (UseExtendedEventDescriptor) {
- ExtendedEventDescriptors->Add(eed);
- d = NULL; // so that it is not deleted
+ if (ExtendedEventDescriptors->Add(eed))
+ d = NULL; // so that it is not deleted
}
if (eed->getDescriptorNumber() == eed->getLastDescriptorNumber())
UseExtendedEventDescriptor = false;
diff --git a/libsi/si.c b/libsi/si.c
index 0ef3939..edc9074 100644
--- a/libsi/si.c
+++ b/libsi/si.c
@@ -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() {
diff --git a/libsi/si.h b/libsi/si.h
index 1e65111..7b47d02 100644
--- a/libsi/si.h
+++ b/libsi/si.h
@@ -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; }
Alles anzeigen
Lars.