diff options
author | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2006-12-08 22:26:22 +0000 |
---|---|---|
committer | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2006-12-08 22:26:22 +0000 |
commit | 5503c1f3bf18cc0f74913040f7fc91ad7a70daf6 (patch) | |
tree | ec37fb91b6d08f9ef94a7ef3d79087a4b3e47142 /src | |
parent | 4169f9efdaeda8a60b5cfd464bd39b80a9dd2032 (diff) | |
download | xine-lib-5503c1f3bf18cc0f74913040f7fc91ad7a70daf6.tar.gz xine-lib-5503c1f3bf18cc0f74913040f7fc91ad7a70daf6.tar.bz2 |
Prevent segfaults on out-of-range last_channel.
CVS patchset: 8408
CVS date: 2006/12/08 22:26:22
Diffstat (limited to 'src')
-rw-r--r-- | src/input/input_dvb.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 8d06cb61e..dbec9ff17 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -3183,15 +3183,14 @@ static char **dvb_class_get_autoplay_list(input_class_t * this_gen, } if (lastchannel_enable.num_value){ - if (lastchannel.num_value>-1) /* plugin has been used before - channel is valid */ - sprintf(foobuffer,"dvb://%s",channels[lastchannel.num_value].name); - else /* set a reasonable default - the first channel */ - sprintf(foobuffer,"dvb://%s",channels[lastchannel_enable.num_value].name); - if(class->autoplaylist[0]) - free(class->autoplaylist[0]); - class->autoplaylist[0]=xine_xmalloc(128); - _x_assert(class->autoplaylist[0] != NULL); - class->autoplaylist[0]=strdup(foobuffer); + if (lastchannel.num_value > -1 && lastchannel.num_value < num_channels) + /* plugin has been used before - channel is valid */ + sprintf (foobuffer, "dvb://%s", channels[lastchannel.num_value].name); + else + /* set a reasonable default - the first channel */ + sprintf (foobuffer, "dvb://%s", num_channels ? channels[0].name : "0"); + free(class->autoplaylist[0]); + class->autoplaylist[0]=strdup(foobuffer); } free(tmpbuffer); |