diff --git a/HISTORY b/HISTORY index 557323c8..bd3e0a3d 100644 --- a/HISTORY +++ b/HISTORY @@ -3037,7 +3037,7 @@ Video Disk Recorder Revision History checking if the channel has a non-zero number. - Updated 'channels.conf.terr' for Hannover (thanks to Sven Kreiensen). -2004-10-23: Version 1.3.14 +2004-10-24: Version 1.3.14 - Fixed detecting transponder lock in cDvbTuner (based on a patch from Stefan Meyknecht). @@ -3059,3 +3059,7 @@ Video Disk Recorder Revision History - Some minor code cleanups (thanks to Prakash K. Cheemplavam). - Fixed missing cleanup at program exit in case there is a problem with a plugin (thanks to Mattias Grönlund for pointing this out). +- Increased the required free buffer space in the resultBuffer of cRemux to + 2 * IPACKS to avoid a buffer overflow in case a cTS2PES writes one complete + packet and then (within processing the same TS packet) wants to write another + small packet. diff --git a/remux.c b/remux.c index 2c1c9f2e..e096f9cc 100644 --- a/remux.c +++ b/remux.c @@ -8,7 +8,7 @@ * the Linux DVB driver's 'tuxplayer' example and were rewritten to suit * VDR's needs. * - * $Id: remux.c 1.20 2004/10/23 12:06:13 kls Exp $ + * $Id: remux.c 1.21 2004/10/24 09:25:33 kls Exp $ */ #include "remux.h" @@ -491,8 +491,8 @@ int cRemux::Put(const uchar *Data, int Count) break; if (Data[i] != TS_SYNC_BYTE) break; - if (resultBuffer->Free() < IPACKS) - break; + if (resultBuffer->Free() < 2 * IPACKS) + break; // A cTS2PES might write one full packet and also a small rest int pid = GetPid(Data + i + 1); if (Data[i + 3] & 0x10) { // got payload if (pid == vPid) vTS2PES->ts_to_pes(Data + i);