VDR 1.3.32 crashes if recording date is in the future

Message ID 432ABBDE.2090901@toms-cafe.de
State New
Headers

Commit Message

Thomas Günther Sept. 16, 2005, 12:34 p.m. UTC
  hgm.bg schrieb:
> vdr-bounces@linuxtv.org wrote:
> 
> 
>>hgm.bg wrote:
>>
>>>vdr-bounces@linuxtv.org wrote:
>>>
>>>It doesn't help:
>>>Program received signal SIGSEGV, Segmentation fault.
>>>[Switching to Thread -1208874400 (LWP 2948)]
>>>0x080cb1e3 in cRecording (this=0x8409ba8,
>>>    FileName=0x840efc4
>>>"Chaos_City/1x01_-_001_-_New_York_New_York_(Pilot)/2007-01-01.00.12.1
>>>0.99.re c") at recording.c:506
>>>506                      data[1] = (char *)realloc(data[1], len + 1
>>>+ strlen(data[2]) + 1); Current language:  auto; currently c++
>>
>>
>>Try with this patch:
>>
>>--- vdr-1.3.32/recording.c      2005-09-11 19:02:51.000000000 +0200
>>+++ vdr-1.3.32/recording.c      2005-09-16 10:38:03.000000000 +0200
>>@@ -496,7 +496,7 @@
>>               data[2] = data[1];
>>               data[1] = NULL;
>>               }
>>-           else if (line == 2) {
>>+           else if (line == 2 && data[1] && data[2]) {
>>               // if line 1 is too long, it can't be the short text,
>>               // so assume the short text is missing and concatenate
>>               // line 1 and line 2 to be the long text:
>>
>>Tom
> 
> 
> Thanks Tom but i converted all summary.vdr's to info.vdr (was a little bit
> difficult with nested directories) and now it starts cleanly, i thought that
> it is not necessary to convert the old ones (it worked fine with 1.3.28)

What did the summary.vdr looks like?

I reproduced your crash with a summary like that:
Titel
<blank line>
Short text longer than 80 characters ...
<blank line>

My first patch solved the crash but didn't show any text. Here is now
the patch that should solve all problems with disfigured summary files.


Tom
  

Patch

--- vdr-1.3.32/recording.c      2005-09-11 19:02:51.000000000 +0200
+++ vdr-1.3.32/recording.c      2005-09-16 13:52:34.000000000 +0200
@@ -492,11 +492,11 @@ 
                     line++;
                  }
            fclose(f);
-           if (line == 1) {
+           if (!data[2]) {
               data[2] = data[1];
               data[1] = NULL;
               }
-           else if (line == 2) {
+           else if (data[1] && data[2]) {
               // if line 1 is too long, it can't be the short text,
               // so assume the short text is missing and concatenate
               // line 1 and line 2 to be the long text: