diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 4fcc6cf0..408f5108 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1902,6 +1902,7 @@ Alexander Rieger for fixing cTimer::operator=() in case a cTimer variable is assigned to itself for making the list of tracks given in cStatus::SetAudioTrack() NULL terminated for fixing handling kLeft in the calls to cStatus::MsgOsdTextItem() + for fixing a possible integer overflow in GetAbsTime() Philip Prindeville for updates to 'sources.conf' diff --git a/HISTORY b/HISTORY index d4736014..92daacc9 100644 --- a/HISTORY +++ b/HISTORY @@ -5762,7 +5762,7 @@ Video Disk Recorder Revision History - Increased the time between checking the CAM status to 500ms to avoid problems with some CAMs (reported by Arthur Konovalov). -2008-08-16: Version 1.7.1 +2008-09-06: Version 1.7.1 - Adapted the tuning code to the new DVBFE_SET_DELSYS API (thanks to Reinhard Nissl). VDR now uses the driver from http://jusst.de/hg/multiproto_plus. @@ -5805,8 +5805,9 @@ Video Disk Recorder Revision History and the SVDRP commands NEWC/MODC/LSTC has been extended. The video stream type now follows the VPID and optional PPID, separated by an '=' sign. - Updated the sources.conf file (thanks to Oleg Roitburd). +- Fixed a possible integer overflow in GetAbsTime() (thanks to Alexander Rieger). -2008-08-16: Version 1.6.0-2 +2008-09-06: Version 1.6.0-2 - Updated the Italian OSD texts (thanks to Diego Pierotto). - The SVDRP signon message now indicates the character encoding in use, as in @@ -5816,3 +5817,4 @@ Video Disk Recorder Revision History - No longer calling FcFini() to avoid problems with older (broken) versions of fontconfig (suggested by Edgar Toernig). - Updated the sources.conf file (thanks to Oleg Roitburd). +- Fixed a possible integer overflow in GetAbsTime() (thanks to Alexander Rieger). diff --git a/thread.c b/thread.c index 0c3b4f5b..f7e365e8 100644 --- a/thread.c +++ b/thread.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.c 2.1 2008/04/13 11:53:56 kls Exp $ + * $Id: thread.c 2.2 2008/09/06 09:39:43 kls Exp $ */ #include "thread.h" @@ -25,11 +25,12 @@ static bool GetAbsTime(struct timespec *Abstime, int MillisecondsFromNow) { struct timeval now; if (gettimeofday(&now, NULL) == 0) { // get current time - now.tv_usec += MillisecondsFromNow * 1000; // add the timeout - while (now.tv_usec >= 1000000) { // take care of an overflow - now.tv_sec++; - now.tv_usec -= 1000000; - } + now.tv_sec += MillisecondsFromNow / 1000; // add full seconds + now.tv_usec += (MillisecondsFromNow % 1000) * 1000; // add microseconds + if (now.tv_usec >= 1000000) { // take care of an overflow + now.tv_sec++; + now.tv_usec -= 1000000; + } Abstime->tv_sec = now.tv_sec; // seconds Abstime->tv_nsec = now.tv_usec * 1000; // nano seconds return true;