diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 1b29740f41b1113d2baa5b1197b0112c44101633..81a71d39f4cb9ec56f34d24233a73d6f2f17dd41 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -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; }