From: mirv Date: Fri, 4 Jan 2008 17:08:20 +0000 (+0100) Subject: fix segfault in EMM due to invalid list entries X-Git-Tag: 0.9.0~57 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=866306e5c3a62c8eabea9ebee78262b6fd9c5ec7;p=sasc-ng.git fix segfault in EMM due to invalid list entries --- diff --git a/cam.c b/cam.c index 1a20284..a400200 100644 --- 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 *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 6e0897c..b38809d 100644 --- 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 bcc236e..6a40ff8 100644 --- 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 cStructList : public cStructLoader { public: cStructList(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 cStructListPlain : public cStructLoaderPlain { public: cStructListPlain(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)); } }; //--------------------------------------------------------------