diff mbox series

[FFmpeg-devel,22/46] avcodec/jpeglsenc: Check for invalid dimensions

Message ID HE1PR0301MB2154FA9394015BAEA35CF0278F5F9@HE1PR0301MB2154.eurprd03.prod.outlook.com
State Accepted
Commit 79402e2c36301fb0ecb1ff797a8de7f79b178c70
Headers show
Series [FFmpeg-devel,01/46] avcodec/a64multienc: Avoid intermediate buffer
Related show

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

Andreas Rheinhardt April 29, 2021, 11:56 p.m. UTC
The dimensions are written on two bytes.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/jpeglsenc.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
diff mbox series

Patch

diff --git a/libavcodec/jpeglsenc.c b/libavcodec/jpeglsenc.c
index 3e73b04c0e..15d9204b1d 100644
--- a/libavcodec/jpeglsenc.c
+++ b/libavcodec/jpeglsenc.c
@@ -413,6 +413,15 @@  static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt,
     return 0;
 }
 
+static av_cold int encode_jpegls_init(AVCodecContext *avctx)
+{
+    if ((avctx->width | avctx->height) > UINT16_MAX) {
+        av_log(avctx, AV_LOG_ERROR, "Dimensions exceeding 65535x65535\n");
+        return AVERROR(EINVAL);
+    }
+    return 0;
+}
+
 #define OFFSET(x) offsetof(JPEGLSContext, x)
 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 static const AVOption options[] = {
@@ -439,6 +448,7 @@  const AVCodec ff_jpegls_encoder = {
     .priv_data_size = sizeof(JPEGLSContext),
     .priv_class     = &jpegls_class,
     .capabilities   = AV_CODEC_CAP_FRAME_THREADS,
+    .init           = encode_jpegls_init,
     .encode2        = encode_picture_ls,
     .pix_fmts       = (const enum AVPixelFormat[]) {
         AV_PIX_FMT_BGR24, AV_PIX_FMT_RGB24,