[FFmpeg-cvslog] asf: Check return value of more avio_seek calls

Joakim Plate git at videolan.org
Wed Sep 21 21:08:34 CEST 2011


ffmpeg | branch: release/0.8 | Joakim Plate <elupus at ecce.se> | Mon Sep 12 04:06:55 2011 +0200| [f0869d3721a21c022f564251f93eb095843490f1] | committer: Michael Niedermayer

asf: Check return value of more avio_seek calls
This reduces problems when underlying protocol is not
seekable even if marked as such or if the file has been
cut short.

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
(cherry picked from commit ac1d489320f476c18d6a8125f73389aecb73f3d3)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f0869d3721a21c022f564251f93eb095843490f1
---

 libavformat/asfdec.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index db00964..033bded 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -1158,7 +1158,8 @@ static int64_t asf_read_pts(AVFormatContext *s, int stream_index, int64_t *ppos,
     if (s->packet_size > 0)
         pos= (pos+s->packet_size-1-s->data_offset)/s->packet_size*s->packet_size+ s->data_offset;
     *ppos= pos;
-    avio_seek(s->pb, pos, SEEK_SET);
+    if (avio_seek(s->pb, pos, SEEK_SET) < 0)
+        return AV_NOPTS_VALUE;
 
 //printf("asf_read_pts\n");
     asf_reset_header(s);
@@ -1200,7 +1201,9 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index)
     int64_t current_pos= avio_tell(s->pb);
     int i;
 
-    avio_seek(s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET);
+    if(avio_seek(s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET) < 0)
+        return;
+
     ff_get_guid(s->pb, &g);
 
     /* the data object can be followed by other top-level objects,
@@ -1272,7 +1275,8 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
 
             /* do the seek */
             av_log(s, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos);
-            avio_seek(s->pb, pos, SEEK_SET);
+            if(avio_seek(s->pb, pos, SEEK_SET) < 0)
+                return -1;
             asf_reset_header(s);
             return 0;
         }



More information about the ffmpeg-cvslog mailing list