Commit af701d42 authored by Joakim Plate's avatar Joakim Plate Committed by Justin Ruggles

cafdec: Check return value of avio_seek and avoid modifying state if it fails

Signed-off-by: 's avatarPaul B Mahol <onemda@gmail.com>
Signed-off-by: 's avatarJustin Ruggles <justin.ruggles@gmail.com>
parent b69c2e0e
...@@ -358,7 +358,7 @@ static int read_seek(AVFormatContext *s, int stream_index, ...@@ -358,7 +358,7 @@ static int read_seek(AVFormatContext *s, int stream_index,
{ {
AVStream *st = s->streams[0]; AVStream *st = s->streams[0];
CaffContext *caf = s->priv_data; CaffContext *caf = s->priv_data;
int64_t pos; int64_t pos, packet_cnt, frame_cnt;
timestamp = FFMAX(timestamp, 0); timestamp = FFMAX(timestamp, 0);
...@@ -367,17 +367,22 @@ static int read_seek(AVFormatContext *s, int stream_index, ...@@ -367,17 +367,22 @@ static int read_seek(AVFormatContext *s, int stream_index,
pos = caf->bytes_per_packet * timestamp / caf->frames_per_packet; pos = caf->bytes_per_packet * timestamp / caf->frames_per_packet;
if (caf->data_size > 0) if (caf->data_size > 0)
pos = FFMIN(pos, caf->data_size); pos = FFMIN(pos, caf->data_size);
caf->packet_cnt = pos / caf->bytes_per_packet; packet_cnt = pos / caf->bytes_per_packet;
caf->frame_cnt = caf->frames_per_packet * caf->packet_cnt; frame_cnt = caf->frames_per_packet * packet_cnt;
} else if (st->nb_index_entries) { } else if (st->nb_index_entries) {
caf->packet_cnt = av_index_search_timestamp(st, timestamp, flags); packet_cnt = av_index_search_timestamp(st, timestamp, flags);
caf->frame_cnt = st->index_entries[caf->packet_cnt].timestamp; frame_cnt = st->index_entries[packet_cnt].timestamp;
pos = st->index_entries[caf->packet_cnt].pos; pos = st->index_entries[packet_cnt].pos;
} else { } else {
return -1; 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; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment