]> www.vanbest.org Git - sasc-ng.git/commitdiff
fix segfault in EMM due to invalid list entries
authormirv <unknown>
Fri, 4 Jan 2008 17:08:20 +0000 (18:08 +0100)
committermirv <unknown>
Fri, 4 Jan 2008 17:08:20 +0000 (18:08 +0100)
cam.c
data.c
data.h

diff --git a/cam.c b/cam.c
index 1a20284ec209b1401adbe8326e4d3435e97dc4b0..a4002008d77562b729e7f9b9c3b47bf1b6b56f0c 100644 (file)
--- a/cam.c
+++ b/cam.c
@@ -647,7 +647,7 @@ cEcmData *cEcmCache::Exists(cEcmInfo *e)
 {
   cEcmData *dat;
   for(dat=First(); dat; dat=Next(dat))
-    if(dat->Valid() && dat->Compare(e)) break;
+    if(dat->Compare(e)) break;
   return dat;
 }
 
@@ -657,7 +657,7 @@ int cEcmCache::GetCached(cSimpleList<cEcmInfo> *list, int sid, int Source, int T
   list->Clear();
   ListLock(false);
   for(cEcmData *dat=First(); dat; dat=Next(dat)) {
-    if(dat->Valid() && dat->prgId==sid && dat->source==Source && dat->transponder==Transponder) {
+    if(dat->prgId==sid && dat->source==Source && dat->transponder==Transponder) {
       cEcmInfo *e=new cEcmInfo(dat);
       if(e) {
         PRINTF(L_CORE_ECM,"from cache: system %s (%04x) id %04x with ecm %x/%x",e->name,e->caId,e->provId,e->ecm_pid,e->ecm_table);
diff --git a/data.c b/data.c
index 6e0897c1e413073868477df32620a25bdccd9ed5..b38809dad58daaab9bfc5d2f049238785d3bcd61 100644 (file)
--- a/data.c
+++ b/data.c
@@ -228,6 +228,12 @@ void cStructLoader::DelItem(cStructItem *d, bool keep)
     }
 }
 
+cStructItem *cStructLoader::NextValid(cStructItem *it) const
+{
+  while(it && !it->Valid()) it=Next(it);
+  return it;
+}
+
 void cStructLoader::SetCfgDir(const char *cfgdir)
 {
   free(path);
@@ -851,7 +857,7 @@ cPlainKey *cPlainKeys::FindKeyNoTrig(int Type, int Id, int Keynr, int Size, cPla
 {
   ListLock(false);
   for(key=key?Next(key):First(); key; key=Next(key))
-    if(key->Valid() && key->type==Type && key->id==Id && key->keynr==Keynr && (Size<0 || key->Size()==Size))
+    if(key->type==Type && key->id==Id && key->keynr==Keynr && (Size<0 || key->Size()==Size))
       break;
   ListUnlock();
   return key;
@@ -929,7 +935,7 @@ void cPlainKeys::PostLoad(void)
 {
   if(Count() && LOG(L_CORE_KEYS))
     for(cPlainKey *dat=First(); dat; dat=Next(dat))
-      if(dat->Valid()) PRINTF(L_CORE_KEYS,"keys %s",*dat->ToString(false));
+      PRINTF(L_CORE_KEYS,"keys %s",*dat->ToString(false));
 }
 
 void cPlainKeys::HouseKeeping(void)
diff --git a/data.h b/data.h
index bcc236edabe38109d06fcb9f80561ce14a2bdb4c..6a40ff808c5ac0aff10696226921697865fa137b 100644 (file)
--- a/data.h
+++ b/data.h
@@ -131,6 +131,7 @@ public:
   virtual ~cStructLoader();
   void AddItem(cStructItem *n, const char *com, cStructItem *ref);
   void DelItem(cStructItem *d, bool keep=false);
+  cStructItem *NextValid(cStructItem *it) const;
   //
   void SetCfgDir(const char *cfgdir);
   virtual void Load(bool reload);
@@ -144,9 +145,8 @@ public:
 template<class T> class cStructList : public cStructLoader {
 public:
   cStructList<T>(const char *Type, const char *Filename, int Flags):cStructLoader(Type,Filename,Flags) {}
-  T *First(void) const { return (T *)cStructLoader::First(); }
-  T *Last(void) const { return (T *)cStructLoader::Last(); }
-  T *Next(const T *item) const { return (T *)cStructLoader::Next(item); }
+  T *First(void) const { return (T *)NextValid(cStructLoader::First()); }
+  T *Next(const T *item) const { return (T *)NextValid(cStructLoader::Next(item)); }
   };
 
 //--------------------------------------------------------------
@@ -168,9 +168,8 @@ public:
 template<class T> class cStructListPlain : public cStructLoaderPlain {
 public:
   cStructListPlain<T>(const char *Type, const char *Filename, int Flags):cStructLoaderPlain(Type,Filename,Flags) {}
-  T *First(void) const { return (T *)cStructLoaderPlain::First(); }
-  T *Last(void) const { return (T *)cStructLoaderPlain::Last(); }
-  T *Next(const T *item) const { return (T *)cStructLoaderPlain::Next(item); }
+  T *First(void) const { return (T *)NextValid(cStructLoaderPlain::First()); }
+  T *Next(const T *item) const { return (T *)NextValid(cStructLoaderPlain::Next(item)); }
   };
 
 //--------------------------------------------------------------