VDR-1.3.46 Segmentation fault
Commit Message
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.
Comments
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.
> - value = strdup(Value);
> + value = Value ? strdup(Value) : NULL;
Werner
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?
@@ -36,7 +36,7 @@
void cMenuEditItem::SetValue(const char *Value)
{
free(value);
- value = strdup(Value);
+ value = Value ? strdup(Value) : NULL;
char *buffer = NULL;
asprintf(&buffer, "%s:\t%s", name, value);
SetText(buffer, false);
@@ -615,61 +615,18 @@
}
channel = (cChannel *)channel->Next();
}
+ if (!number) {
+ // couldn't find the selected channel, or one hasn't yet been chosen;
+ // default to the first available channel
+ channel = Channels.First();
+ while (channel) {
+ if (!channel->GroupSep()) {
+ number = channel->Number();
+ break;
+ }
+ channel = (cChannel *)channel->Next();
+ }
+ }
Set();
}