fix segfault on transponders with incorrect mjd entries in the TDT
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sat, 15 Apr 2006 11:02:41 +0000 (11:02 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sat, 15 Apr 2006 11:02:41 +0000 (11:02 +0000)
null pointer check before accessing sectionreader object

lib/dvb/dvbtime.cpp
lib/dvb/esection.cpp

index dff5c0c..eb0ed69 100644 (file)
@@ -84,7 +84,8 @@ int TDT::createTable(int nr, const __u8 *data, unsigned int max)
                if ( length >= 5 )
                {
                        time_t tptime = parseDVBtime(data[3], data[4], data[5], data[6], data[7]);
-                       eDVBLocalTimeHandler::getInstance()->updateTime(tptime, chan, update_count);
+                       if (tptime && tptime != -1)
+                               eDVBLocalTimeHandler::getInstance()->updateTime(tptime, chan, update_count);
                        error=0;
                        return 1;
                }
index ae88d10..4758008 100644 (file)
@@ -23,8 +23,11 @@ void eGTable::sectionRead(const __u8 *d)
        {
                if (m_timeout)
                        m_timeout->stop();
-               m_reader->stop();
-               m_reader=0;
+               if (m_reader)
+               {
+                       m_reader->stop();
+                       m_reader=0;
+               }
                m_sectionRead_conn=0;
                ready = 1;
                tableReady(error);
@@ -35,8 +38,11 @@ void eGTable::sectionRead(const __u8 *d)
 void eGTable::timeout()
 {
        eDebug("timeout!");
-       m_reader->stop();
-       m_reader=0;
+       if (m_reader)
+       {
+               m_reader->stop();
+               m_reader=0;
+       }
        m_sectionRead_conn=0;
        ready = 1;
        error = -1;