diff options
author | Joakim Plate <elupus@ecce.se> | 2011-09-12 04:06:55 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-09-12 04:39:12 +0200 |
commit | ac1d489320f476c18d6a8125f73389aecb73f3d3 (patch) | |
tree | 887e55565102aa353ced0a4d7274eabfc76f39c1 /libavformat/asfdec.c | |
parent | bc851a2946c64eefb96145b70e2190ff7d5a4827 (diff) | |
download | ffmpeg-ac1d489320f476c18d6a8125f73389aecb73f3d3.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>
Diffstat (limited to 'libavformat/asfdec.c')
-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 14bd9514e7..fe3737242e 100644 --- a/libavformat/asfdec.c +++ b/libavformat/asfdec.c @@ -1155,7 +1155,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); @@ -1197,7 +1198,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, @@ -1269,7 +1272,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; } |