mirror of https://git.ffmpeg.org/ffmpeg.git
flvdec: Check the avio_seek return value after reading a metadata packet
If the metadata packet is corrupted, flv_read_metabody can accidentally read past the start of the next packet. If the start of the next packet had been flushed out of the IO buffer, we would be unable to seek to the right position (on a nonseekable stream). Prefer to clearly error out instead of silently trying to read from a desynced stream which will only be interpreted as garbage. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
e12f1cd616
commit
585dc1aece
|
@ -801,7 +801,13 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||
type, size, flags);
|
||||
|
||||
skip:
|
||||
avio_seek(s->pb, next, SEEK_SET);
|
||||
if (avio_seek(s->pb, next, SEEK_SET) != next) {
|
||||
// This can happen if flv_read_metabody above read past
|
||||
// next, on a non-seekable input, and the preceding data has
|
||||
// been flushed out from the IO buffer.
|
||||
av_log(s, AV_LOG_ERROR, "Unable to seek to the next packet\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue