aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-12-06 12:20:21 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-01-11 15:15:52 +0100
commit0066e79c9eca8611ff425221bc54a58969ca606f (patch)
tree8d77f586a56e8754a62e3d542164e1cff3f91ea6 /libavcodec
parentd1f7a44e89fa90748a71c7d714c53036a2a44800 (diff)
downloadffmpeg-0066e79c9eca8611ff425221bc54a58969ca606f.tar.gz
avcodec/libopenh264dec: Increase array sizes, fix stack-buffer overread
av_image_copy() expects an array of four pointers and linesizes according to its declaration; it currently only pointers that are actually in use (depending upon the pixel format), but this might change at any time. It has already happened for the linesizes in d7bc52bf456deba0f32d9fe5c288ec441f1ebef5 and so increasing their array fixes a stack-buffer overread. This fixes a -Wstringop-overflow= and -Wstringop-overread warning from GCC 11.2. Reviewed-by: Linjie Fu <linjie.justin.fu@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> (cherry picked from commit b0b90100bfda8c5cf95889e00183589de0abce60)
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/libopenh264dec.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libavcodec/libopenh264dec.c b/libavcodec/libopenh264dec.c
index c7aa7fa19c..dcd781dd84 100644
--- a/libavcodec/libopenh264dec.c
+++ b/libavcodec/libopenh264dec.c
@@ -91,8 +91,8 @@ static int svc_decode_frame(AVCodecContext *avctx, void *data,
{
SVCContext *s = avctx->priv_data;
SBufferInfo info = { 0 };
- uint8_t* ptrs[3];
- int ret, linesize[3];
+ uint8_t *ptrs[4] = { NULL };
+ int ret, linesize[4];
AVFrame *avframe = data;
DECODING_STATE state;
#if OPENH264_VER_AT_LEAST(1, 7)
@@ -140,6 +140,7 @@ static int svc_decode_frame(AVCodecContext *avctx, void *data,
linesize[0] = info.UsrData.sSystemBuffer.iStride[0];
linesize[1] = linesize[2] = info.UsrData.sSystemBuffer.iStride[1];
+ linesize[3] = 0;
av_image_copy(avframe->data, avframe->linesize, (const uint8_t **) ptrs, linesize, avctx->pix_fmt, avctx->width, avctx->height);
avframe->pts = info.uiOutYuvTimeStamp;