[vdr] VDR-1.3.46 Segmentation fault

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Mon Apr 10 20:49:56 CEST 2006


Darren Salt wrote:
> I demand that Dr. Werner Fink may or may not have written...
> 
> 
>>On Mon, Apr 10, 2006 at 02:50:35AM +0100, Darren Salt wrote:
>>
>>>I demand that I definitely did write...
> 
> 
>>>>I demand that Thomas Günther may or may not have written...
>>>>
>>>>>If I try to set the time transponder the vdr crashes. :-( Program
>>>>>received signal SIGSEGV, Segmentation fault.
> 
> 
>>>>>(gdb) bt
>>>>>#0  0x401f4cff in strlen () from /lib/libc.so.6
>>>>>#1  0x401f4a55 in strdup () from /lib/libc.so.6
>>>>>#2  0x080e0b2f in cMenuEditItem::SetValue (this=0xa268768, Value=0x0) at menuitems.c:39
> 
> 
>>>>I suggest replacing that line with
>>>>  value = Value ? strdup(Value) : NULL;
>>>
>>>[snip]
>>>Full patch attached. On enabling the "set time from broadcast" function,
>>>default to the first available channel.
> 
> 
>>Hmmm... strdup() can return NULL if the system is low at or out of memory.
> 
> 
> True, but that probably doesn't matter here: something's going to fail anyway
> if that happens. Perhaps a wrapper is needed?

Memory is allocated and freed throughout the programm all the time.
I don't see how it could reasonably be made to cope with running out
of memory.

Back to the original problem.
I prefer this fix:


--- menuitems.c 2006/04/09 13:10:02     1.36
+++ menuitems.c 2006/04/10 06:31:02
@@ -572,7 +572,7 @@
       snprintf(buf, sizeof(buf), "%d %s", *value, channel ? channel->Name() : "");
       SetValue(buf);
       }
-  else
+  else if (noneString)
       SetValue(noneString);
  }


Klaus



More information about the vdr mailing list