From 43ca916c20a72c9b47a15c460cced63b5c19c286 Mon Sep 17 00:00:00 2001
From: Klaus Schmidinger <vdr@tvdr.de>
Date: Sat, 10 Jan 2004 16:52:01 +0100
Subject: Fixed a possible NULL pointer access in cEITScanner::Process()

---
 CONTRIBUTORS |  1 +
 HISTORY      |  2 ++
 eitscan.c    | 24 +++++++++++++-----------
 3 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 8ffa6c2e..9b21c586 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -586,6 +586,7 @@ Andreas Kool <akool@akool.de>
  for reporting a problem with empty values in setup.conf
  for fixing detecting the /dev/videoN devices for GRAB in case there are others
  before the DVB devices
+ for fixing a possible NULL pointer access in cEITScanner::Process()
 
 Guy Roussin <guy.roussin@teledetection.fr>
  for suggesting not to display channel group delimiters without text
diff --git a/HISTORY b/HISTORY
index 3fb3ccc9..8db000f9 100644
--- a/HISTORY
+++ b/HISTORY
@@ -2564,3 +2564,5 @@ Video Disk Recorder Revision History
   to Marcel Wiesweg).
 - In case of incomplete sections an error message is now logged only every 10
   seconds.
+- Fixed a possible NULL pointer access in cEITScanner::Process() (thanks to
+  Andreas Kool).
diff --git a/eitscan.c b/eitscan.c
index 755bddf1..4273f773 100644
--- a/eitscan.c
+++ b/eitscan.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: eitscan.c 1.16 2004/01/05 09:51:25 kls Exp $
+ * $Id: eitscan.c 1.17 2004/01/10 16:50:51 kls Exp $
  */
 
 #include "eitscan.h"
@@ -116,16 +116,18 @@ void cEITScanner::Process(void)
                          if (Device != cDevice::PrimaryDevice() || (cDevice::NumDevices() == 1 && Setup.EPGScanTimeout && now - lastActivity > Setup.EPGScanTimeout * 3600)) {
                             if (!(Device->Receiving(true) || Device->Replaying())) {
                                cChannel *Channel = ScanData->GetChannel();
-                               //XXX if (Device->ProvidesTransponder(Channel)) {
-                               if ((!Channel->Ca() || Channel->Ca() == Device->DeviceNumber() + 1 || Channel->Ca() >= 0x0100) && Device->ProvidesTransponder(Channel)) { //XXX temporary for the 'sky' plugin
-                                  if (Device == cDevice::PrimaryDevice() && !currentChannel)
-                                     currentChannel = Device->CurrentChannel();
-                                  currentDevice = Device;//XXX see also dvbdevice.c!!!
-                                  Device->SwitchChannel(Channel, false);
-                                  currentDevice = NULL;
-                                  scanList->Del(ScanData);
-                                  ScanData = NULL;
-                                  AnyDeviceSwitched = true;
+                               if (Channel) {
+                                  //XXX if (Device->ProvidesTransponder(Channel)) {
+                                  if ((!Channel->Ca() || Channel->Ca() == Device->DeviceNumber() + 1 || Channel->Ca() >= 0x0100) && Device->ProvidesTransponder(Channel)) { //XXX temporary for the 'sky' plugin
+                                     if (Device == cDevice::PrimaryDevice() && !currentChannel)
+                                        currentChannel = Device->CurrentChannel();
+                                     currentDevice = Device;//XXX see also dvbdevice.c!!!
+                                     Device->SwitchChannel(Channel, false);
+                                     currentDevice = NULL;
+                                     scanList->Del(ScanData);
+                                     ScanData = NULL;
+                                     AnyDeviceSwitched = true;
+                                     }
                                   }
                                }
                             }
-- 
cgit v1.2.3