summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/demuxer.c12
-rw-r--r--libmpdemux/demuxer.h7
2 files changed, 17 insertions, 2 deletions
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