ff_read_timestamp: check stream_index before using it as array index
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 18 Feb 2013 18:48:44 +0000 (19:48 +0100)
committerCarl Eugen Hoyos <cehoyos@ag.or.at>
Thu, 30 May 2013 09:05:58 +0000 (11:05 +0200)
Fixes out of array read

Fixes ticket #2609.

Found-by: durandal_1707
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 695a766bff4cd8414a84e58159506d72b4e44892)

libavformat/utils.c

index e85fa65..fc374f0 100644 (file)
@@ -1765,7 +1765,10 @@ int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp,
 static int64_t ff_read_timestamp(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit,
                                  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ))
 {
-    return wrap_timestamp(s->streams[stream_index], read_timestamp(s, stream_index, ppos, pos_limit));
+    int64_t ts = read_timestamp(s, stream_index, ppos, pos_limit);
+    if (stream_index >= 0)
+        ts = wrap_timestamp(s->streams[stream_index], ts);
+    return ts;
 }
 
 int ff_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags)