diff options
author | Joakim Plate <elupus@ecce.se> | 2012-02-10 18:47:53 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-02-10 15:27:50 -0500 |
commit | af701d42c3550c9927652986229a96404346b1e4 (patch) | |
tree | 5ba3d01d881e0417ba7a18a2f4829e1ff496da82 | |
parent | b69c2e0e6dab87bb90fece1d0de47c28394aa8e6 (diff) | |
download | ffmpeg-af701d42c3550c9927652986229a96404346b1e4.tar.gz |
cafdec: Check return value of avio_seek and avoid modifying state if it fails
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
-rw-r--r-- | libavformat/cafdec.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c index abde78d56c..5d214de41e 100644 --- a/libavformat/cafdec.c +++ b/libavformat/cafdec.c @@ -358,7 +358,7 @@ static int read_seek(AVFormatContext *s, int stream_index, { AVStream *st = s->streams[0]; CaffContext *caf = s->priv_data; - int64_t pos; + int64_t pos, packet_cnt, frame_cnt; timestamp = FFMAX(timestamp, 0); @@ -367,17 +367,22 @@ static int read_seek(AVFormatContext *s, int stream_index, pos = caf->bytes_per_packet * timestamp / caf->frames_per_packet; if (caf->data_size > 0) pos = FFMIN(pos, caf->data_size); - caf->packet_cnt = pos / caf->bytes_per_packet; - caf->frame_cnt = caf->frames_per_packet * caf->packet_cnt; + packet_cnt = pos / caf->bytes_per_packet; + frame_cnt = caf->frames_per_packet * packet_cnt; } else if (st->nb_index_entries) { - caf->packet_cnt = av_index_search_timestamp(st, timestamp, flags); - caf->frame_cnt = st->index_entries[caf->packet_cnt].timestamp; - pos = st->index_entries[caf->packet_cnt].pos; + packet_cnt = av_index_search_timestamp(st, timestamp, flags); + frame_cnt = st->index_entries[packet_cnt].timestamp; + pos = st->index_entries[packet_cnt].pos; } else { return -1; } - avio_seek(s->pb, pos + caf->data_start, SEEK_SET); + if (avio_seek(s->pb, pos + caf->data_start, SEEK_SET) < 0) + return -1; + + caf->packet_cnt = packet_cnt; + caf->frame_cnt = frame_cnt; + return 0; } |