From a762fd2c1b7fe4f0140ed297321b307f9527f929 Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 14 Aug 2020 00:09:43 -0300 Subject: [PATCH] avformat/av1dec: fix return value on some code paths If avio_read() returns a value of bytes read that's lower than the expected, return an error instead. And when there are zero bytes in the prefetch buffer, return 0 in order for the frame merge bsf to drain all potentially buffered packets. Missed by mistake when amending and committing 9a7bdb6d71. Signed-off-by: James Almer --- libavformat/av1dec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavformat/av1dec.c b/libavformat/av1dec.c index ee5b0fd0fc..0693e40ac1 100644 --- a/libavformat/av1dec.c +++ b/libavformat/av1dec.c @@ -411,7 +411,7 @@ static int obu_read_data(AVFormatContext *s, AVPacket *pkt, int len) ret = avio_read(s->pb, pkt->data + size, left); if (ret != left) { av_log(c, AV_LOG_ERROR, "Failed to read %d frome file\n", left); - return ret; + return ret < 0 ? ret : AVERROR_INVALIDDATA; } } return 0; @@ -426,7 +426,7 @@ static int obu_get_packet(AVFormatContext *s, AVPacket *pkt) ret = obu_prefetch(s, header); if (!ret) - return AVERROR(EOF); + return 0; ret = read_obu_with_size(header, ret, &obu_size, &type); if (ret < 0) {