[FFmpeg-devel] [PATCH 4/5] avcodec/sga: Check non constant init_get_bits8()

Michael Niedermayer michael at niedermayer.cc
Fri May 17 02:19:31 EEST 2024


Fixes: CID1473562 Unchecked return value
Fixes: CID1473592 Unchecked return value

Sponsored-by: Sovereign Tech Fund
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
 libavcodec/sga.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/libavcodec/sga.c b/libavcodec/sga.c
index 0f42cf912b2..aca941e057e 100644
--- a/libavcodec/sga.c
+++ b/libavcodec/sga.c
@@ -254,11 +254,14 @@ static int decode_palmapdata(AVCodecContext *avctx)
     const int bits = (s->nb_pal + 1) / 2;
     GetByteContext *gb = &s->gb;
     GetBitContext pm;
+    int ret;
 
     bytestream2_seek(gb, s->palmapdata_offset, SEEK_SET);
     if (bytestream2_get_bytes_left(gb) < s->palmapdata_size)
         return AVERROR_INVALIDDATA;
-    init_get_bits8(&pm, gb->buffer, s->palmapdata_size);
+    ret = init_get_bits8(&pm, gb->buffer, s->palmapdata_size);
+    if (ret < 0)
+        return ret;
 
     for (int y = 0; y < s->tiles_h; y++) {
         uint8_t *dst = s->palmapindex_data + y * s->tiles_w;
@@ -277,11 +280,14 @@ static int decode_tiledata(AVCodecContext *avctx)
     SGAVideoContext *s = avctx->priv_data;
     GetByteContext *gb = &s->gb;
     GetBitContext tm;
+    int ret;
 
     bytestream2_seek(gb, s->tiledata_offset, SEEK_SET);
     if (bytestream2_get_bytes_left(gb) < s->tiledata_size)
         return AVERROR_INVALIDDATA;
-    init_get_bits8(&tm, gb->buffer, s->tiledata_size);
+    ret = init_get_bits8(&tm, gb->buffer, s->tiledata_size);
+    if (ret < 0)
+        return ret;
 
     for (int n = 0; n < s->nb_tiles; n++) {
         uint8_t *dst = s->tileindex_data + n * 64;
-- 
2.43.2



More information about the ffmpeg-devel mailing list