summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarren Salt <linux@youmustbejoking.demon.co.uk>2006-12-08 22:26:22 +0000
committerDarren Salt <linux@youmustbejoking.demon.co.uk>2006-12-08 22:26:22 +0000
commit5503c1f3bf18cc0f74913040f7fc91ad7a70daf6 (patch)
treeec37fb91b6d08f9ef94a7ef3d79087a4b3e47142
parent4169f9efdaeda8a60b5cfd464bd39b80a9dd2032 (diff)
downloadxine-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
-rw-r--r--src/input/input_dvb.c17
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);