From 4c88f1da7e96572ad63e82b4756694abef0dd33a Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 2 Sep 2006 10:22:40 +0200 Subject: [PATCH] Fixed the cTimer::operator=() so that it won't mess up the cListObject's pointers; fixed a memory leak in the cTimer::operator=() when using the 'aux' string --- CONTRIBUTORS | 2 ++ HISTORY | 6 +++++- timers.c | 23 ++++++++++++++++++----- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 357eb5d2..10bf779d 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1737,6 +1737,8 @@ Alexander Rieger for fixing a typo in skins.h for making cSkins::QueueMessage() called from a background thread with an empty message clears all messages that have been previously queued by that thread + for reporting that the cTimer::operator=() messes up the cListObject's pointers + for reporting a memory leak in the cTimer::operator=() when using the 'aux' string Philip Prindeville for updates to 'sources.conf' diff --git a/HISTORY b/HISTORY index bfbcc44a..10225751 100644 --- a/HISTORY +++ b/HISTORY @@ -4896,6 +4896,10 @@ Video Disk Recorder Revision History detatching receivers. This change has caused some unwanted behavior, so further testing is necessary. -2006-09-01: Version 1.4.2-1 +2006-09-02: Version 1.4.2-1 - Added LC_ALL to the checks for UTF-8 at startup (suggested by Matthias Schwarzott). +- Fixed the cTimer::operator=() so that it won't mess up the cListObject's pointers + (reported by Alexander Rieger). +- Fixed a memory leak in the cTimer::operator=() when using the 'aux' string + (reported by Alexander Rieger). diff --git a/timers.c b/timers.c index 8bc0b324..d8d00168 100644 --- a/timers.c +++ b/timers.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.c 1.62 2006/08/05 12:03:36 kls Exp $ + * $Id: timers.c 1.63 2006/09/02 10:20:36 kls Exp $ */ #include "timers.h" @@ -90,11 +90,24 @@ cTimer::~cTimer() cTimer& cTimer::operator= (const cTimer &Timer) { - memcpy(this, &Timer, sizeof(*this)); - if (aux) - aux = strdup(aux); - event = NULL; + startTime = Timer.startTime; + stopTime = Timer.stopTime; lastSetEvent = 0; + recording = Timer.recording; + pending = Timer.pending; + inVpsMargin = Timer.inVpsMargin; + flags = Timer.flags; + channel = Timer.channel; + day = Timer.day; + weekdays = Timer.weekdays; + start = Timer.start; + stop = Timer.stop; + priority = Timer.priority; + lifetime = Timer.lifetime; + strncpy(file, Timer.file, sizeof(file)); + free(aux); + aux = Timer.aux ? strdup(Timer.aux) : NULL; + event = NULL; return *this; }