diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 7f95bf8f8f..1fa819ffa4 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -67,6 +67,12 @@ demuxer_t* new_demuxer(stream_t *stream,int type,int a_id,int v_id,int s_id){ } sh_audio_t* new_sh_audio(demuxer_t *demuxer,int id){ + if(id > MAX_A_STREAMS-1) + { + mp_msg(MSGT_DEMUXER,MSGL_WARN,"Requested audio stream id overflow (%d > %d)\n", + id, MAX_A_STREAMS); + return NULL; + } if(demuxer->a_streams[id]){ mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_AudioStreamRedefined,id); } else { @@ -85,6 +91,12 @@ void free_sh_audio(sh_audio_t* sh){ } sh_video_t* new_sh_video(demuxer_t *demuxer,int id){ + if(id > MAX_V_STREAMS-1) + { + mp_msg(MSGT_DEMUXER,MSGL_WARN,"Requested video stream id overflow (%d > %d)\n", + id, MAX_V_STREAMS); + return NULL; + } if(demuxer->v_streams[id]){ mp_msg(MSGT_DEMUXER,MSGL_WARN,MSGTR_VideoStreamRedefined,id); } else { diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index 89d08af141..b9389f7704 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -71,6 +71,9 @@ typedef struct demuxer_info_st { char *copyright; } demuxer_info_t; +#define MAX_A_STREAMS 256 +#define MAX_V_STREAMS 256 + typedef struct demuxer_st { stream_t *stream; int synced; // stream synced (used by mpeg) @@ -86,8 +89,8 @@ typedef struct demuxer_st { demux_stream_t *sub; // dvd subtitle buffer/demuxer // stream headers: - void* a_streams[256]; // audio streams (sh_audio_t) - void* v_streams[256]; // video sterams (sh_video_t) + void* a_streams[MAX_A_STREAMS]; // audio streams (sh_audio_t) + void* v_streams[MAX_V_STREAMS]; // video sterams (sh_video_t) char s_streams[32]; // dvd subtitles (flag) void* priv; // fileformat-dependent data