From 638ef5f75896e60dc437d0955ced3cb1901a5e25 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Mon, 22 Jun 2020 04:25:22 +0200 Subject: [PATCH] avformat/smacker: Don't read only one byte at a time Instead use ffio_read_size to read data into a buffer. Also check that the desired size was actually successfully read and combine the check with the check for reading the extradata. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 2043563fdb..201372aee6 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -215,15 +215,12 @@ static int smacker_read_header(AVFormatContext *s) for (i = 0; i < smk->frames; i++) { smk->frm_size[i] = avio_rl32(pb); } - for (i = 0; i < smk->frames; i++) { - smk->frm_flags[i] = avio_r8(pb); - } - - /* load trees to extradata, they will be unpacked by decoder */ - ret = avio_read(pb, par->extradata + 16, par->extradata_size - 16); - if (ret != par->extradata_size - 16) { + if ((ret = ffio_read_size(pb, smk->frm_flags, smk->frames)) < 0 || + /* load trees to extradata, they will be unpacked by decoder */ + (ret = ffio_read_size(pb, par->extradata + 16, + par->extradata_size - 16)) < 0) { av_freep(&smk->frm_size); - return AVERROR(EIO); + return ret; } return 0; -- GitLab