diff options
author | Joakim Plate <elupus@ecce.se> | 2011-09-12 04:06:55 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-09-21 18:03:05 +0200 |
commit | f0869d3721a21c022f564251f93eb095843490f1 (patch) | |
tree | 8b0f94463cb62b20d25441029e11beef4cc539e4 | |
parent | be82df9e129995321917f47416ac755551915cb0 (diff) | |
download | ffmpeg-f0869d3721a21c022f564251f93eb095843490f1.tar.gz |
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@gmx.at>
(cherry picked from commit ac1d489320f476c18d6a8125f73389aecb73f3d3)
-rw-r--r-- | libavformat/asfdec.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c index db00964c8a..033bdede13 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; } |