Skip to content
Snippets Groups Projects
Commit 585dc1ae authored by Martin Storsjö's avatar Martin Storsjö
Browse files

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: default avatarMartin Storsjö <martin@martin.st>
parent e12f1cd6
No related branches found
No related tags found
No related merge requests found
...@@ -801,7 +801,13 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -801,7 +801,13 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
type, size, flags); type, size, flags);
skip: 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; continue;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment