Fix possible crash when decoding mpeg streams.
authorCarl Eugen Hoyos <cehoyos@ag.or.at>
Thu, 4 Aug 2011 09:06:43 +0000 (11:06 +0200)
committerCarl Eugen Hoyos <cehoyos@ag.or.at>
Thu, 4 Aug 2011 09:49:52 +0000 (11:49 +0200)
This reverts 2cf8355f98681bdd726b739008acd5483f82f8d7,
fixes ticket 329.

ffmpeg.c

index 18ee782..c6374df 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -343,6 +343,7 @@ typedef struct AVInputFile {
     int eof_reached;      /* true if eof reached */
     int ist_index;        /* index of first stream in ist_table */
     int buffer_size;      /* current total buffer size */
+    int nb_streams;
 } AVInputFile;
 
 #if HAVE_TERMIOS_H
@@ -2045,7 +2046,7 @@ static int transcode(AVFormatContext **output_files,
         int si = stream_maps[i].stream_index;
 
         if (fi < 0 || fi > nb_input_files - 1 ||
-            si < 0 || si > input_files[fi].ctx->nb_streams - 1) {
+            si < 0 || si > input_files[fi].nb_streams - 1) {
             fprintf(stderr,"Could not find input stream #%d.%d\n", fi, si);
             ret = AVERROR(EINVAL);
             goto fail;
@@ -2731,7 +2732,7 @@ static int transcode(AVFormatContext **output_files,
         }
         /* the following test is needed in case new streams appear
            dynamically in stream : we ignore them */
-        if (pkt.stream_index >= input_files[file_index].ctx->nb_streams)
+        if (pkt.stream_index >= input_files[file_index].nb_streams)
             goto discard_packet;
         ist_index = input_files[file_index].ist_index + pkt.stream_index;
         ist = &input_streams[ist_index];
@@ -3468,6 +3469,7 @@ static int opt_input_file(const char *opt, const char *filename)
     input_files = grow_array(input_files, sizeof(*input_files), &nb_input_files, nb_input_files + 1);
     input_files[nb_input_files - 1].ctx        = ic;
     input_files[nb_input_files - 1].ist_index  = nb_input_streams - ic->nb_streams;
+    input_files[nb_input_files - 1].nb_streams = ic->nb_streams;
 
     top_field_first = -1;
     video_channel = 0;