ffmdec: 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>
This commit is contained in:
parent
8332321c57
commit
d7c11b114b
@ -167,7 +167,7 @@ static int ffm_read_data(AVFormatContext *s,
|
|||||||
|
|
||||||
/* ensure that acutal seeking happens between FFM_PACKET_SIZE
|
/* ensure that acutal seeking happens between FFM_PACKET_SIZE
|
||||||
and file_size - FFM_PACKET_SIZE */
|
and file_size - FFM_PACKET_SIZE */
|
||||||
static void ffm_seek1(AVFormatContext *s, int64_t pos1)
|
static int64_t ffm_seek1(AVFormatContext *s, int64_t pos1)
|
||||||
{
|
{
|
||||||
FFMContext *ffm = s->priv_data;
|
FFMContext *ffm = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
@ -176,7 +176,7 @@ static void ffm_seek1(AVFormatContext *s, int64_t pos1)
|
|||||||
pos = FFMIN(pos1, ffm->file_size - FFM_PACKET_SIZE);
|
pos = FFMIN(pos1, ffm->file_size - FFM_PACKET_SIZE);
|
||||||
pos = FFMAX(pos, FFM_PACKET_SIZE);
|
pos = FFMAX(pos, FFM_PACKET_SIZE);
|
||||||
av_dlog(s, "seek to %"PRIx64" -> %"PRIx64"\n", pos1, pos);
|
av_dlog(s, "seek to %"PRIx64" -> %"PRIx64"\n", pos1, pos);
|
||||||
avio_seek(pb, pos, SEEK_SET);
|
return avio_seek(pb, pos, SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t get_dts(AVFormatContext *s, int64_t pos)
|
static int64_t get_dts(AVFormatContext *s, int64_t pos)
|
||||||
@ -487,7 +487,8 @@ static int ffm_seek(AVFormatContext *s, int stream_index, int64_t wanted_pts, in
|
|||||||
pos = (flags & AVSEEK_FLAG_BACKWARD) ? pos_min : pos_max;
|
pos = (flags & AVSEEK_FLAG_BACKWARD) ? pos_min : pos_max;
|
||||||
|
|
||||||
found:
|
found:
|
||||||
ffm_seek1(s, pos);
|
if (ffm_seek1(s, pos) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
/* reset read state */
|
/* reset read state */
|
||||||
ffm->read_state = READ_HEADER;
|
ffm->read_state = READ_HEADER;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user