[vdr] vdr 1.3.35 crashing when leaving a recording at the end

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Tue Nov 1 19:56:53 CET 2005


Joachim Wilke wrote:
> Hi everyone,
> 
> i have experienced some strange behaviour of my plain vanilla vdr.
> When vdr reaches the end of a replay it segfaults. Core file analysis
> showed the following backtrace:
> 
> #0  cUnbufferedFile::Seek(long, int) (this=0x0, Offset=0, Whence=0) at
> tools.c:884
> #1  0x080dab2c in cFileName::SetOffset(int, int) (this=0xb56a1540,
> Number=3, Offset=0) at recording.c:1345
> #2  0x080dac5d in cFileName::NextFile() (this=0x0) at recording.c:1358
> #3  0x0809d8e1 in cDvbPlayer::NextFile(unsigned char, int)
> (this=0xb56a1540, FileNumber=64 '@', FileOffset=0) at dvbplayer.c:306
> #4  0x0809db67 in cDvbPlayer::Action() (this=0x3) at thread.h:94
> #5  0x080fce56 in cThread::StartThread(cThread*) (Thread=0x3) at thread.c:234
> #6  0xb7fbab63 in start_thread () from /lib/tls/libpthread.so.0
> 
> It seems that vdr tries to access a reference to an cUbufferedFile
> object in cFileName::SetOffset which is a null pointer. The following
> quick and dirty hack solved the crash, but as I don't know this code
> deep enough it may have other side effects.
> 
> --- recording.c.sav     Mon Oct 31 13:27:58 2005
> +++ recording.c Tue Nov  1 19:20:27 2005
> @@ -1342,7 +1342,7 @@ cUnbufferedFile *cFileName::SetOffset(in
>          // found a non existing file suffix
>          }
>       if (Open() >= 0) {
> -        if (!record && Offset >= 0 && file->Seek(Offset, SEEK_SET) != Offset) {
> +        if (!record && Offset >= 0 && file && file->Seek(Offset,
> SEEK_SET) != Offset) {
>             LOG_ERROR_STR(fileName);
>             return NULL;
>             }
> 
> Regards,
> Joachim.

I'd say this isn't just a "quick and dirty hack", it's the actual fix.
Before using cUbufferedFile the lseek() just failed when the file handle
was -1. Now the pointer is NULL in than case, so the check is necessary.

Thanks for spotting.

Klaus



More information about the vdr mailing list