From bae02358a3a0f697bb10fe67bfc6ea183e36679b Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Wed, 31 May 2017 14:06:07 +0200 Subject: [PATCH] Fixed a possible crash in case the SVDRP connection to a peer VDR is terminated while getting remote timers --- HISTORY | 4 +++- svdrp.c | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/HISTORY b/HISTORY index 55c8909b..5b4c1a9d 100644 --- a/HISTORY +++ b/HISTORY @@ -9056,7 +9056,7 @@ Video Disk Recorder Revision History - Fixed detecting the inclusion of STL header files in tools.h (thanks to Jasmin Jessich). -2017-05-30: Version 2.3.6 +2017-05-31: Version 2.3.6 - Added debug output for checking the correct sequence of locking global lists (with help and suggestions from Jasmin Jessich). To activate this, define the @@ -9087,3 +9087,5 @@ Video Disk Recorder Revision History - Now using a separate mutex to fix the race between SVDRP CHAN and cDevice::HasProgramme(), because the previous fix caused a deadlock (reported by Derek Kelly). +- Fixed a possible crash in case the SVDRP connection to a peer VDR is terminated + while getting remote timers. diff --git a/svdrp.c b/svdrp.c index 9caf6edf..2b63c801 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 4.19 2017/05/28 13:05:23 kls Exp $ + * $Id: svdrp.c 4.20 2017/05/31 14:02:17 kls Exp $ */ #include "svdrp.h" @@ -385,7 +385,8 @@ void cSVDRPClient::Close(void) file.Close(); socket.Close(); LOCK_TIMERS_WRITE; - Timers->DelRemoteTimers(serverName); + if (Timers) + Timers->DelRemoteTimers(serverName); } } @@ -463,6 +464,7 @@ bool cSVDRPClient::Process(cStringList *Response) else if (r <= 0) { isyslog("SVDRP < %s lost connection to remote server '%s'", ipAddress.Connection(), *serverName); Close(); + return false; } } else if (!Response)