diff mbox series

[FFmpeg-devel] avcodec/hevc/ps: add a range check for sps_max_sub_layers

Message ID 20241005210530.7189-1-jamrial@gmail.com
State New
Headers show
Series [FFmpeg-devel] avcodec/hevc/ps: add a range check for sps_max_sub_layers | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished

Commit Message

James Almer Oct. 5, 2024, 9:05 p.m. UTC
It can't be higher than vps_max_sub_layers.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/hevc/ps.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c
index 993c60144f..bd01f63956 100644
--- a/libavcodec/hevc/ps.c
+++ b/libavcodec/hevc/ps.c
@@ -1172,17 +1172,16 @@  int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id,
         }
         sps->vps = ff_refstruct_ref_c(vps_list[sps->vps_id]);
     }
+    if (!sps->vps)
+        return AVERROR(EINVAL);
 
     sps->max_sub_layers = get_bits(gb, 3) + 1;
     multi_layer_ext = nuh_layer_id > 0 &&
                       sps->max_sub_layers == HEVC_MAX_SUB_LAYERS + 1;
-    if (multi_layer_ext) {
-        if (!sps->vps)
-            return AVERROR(EINVAL);
-
+    if (multi_layer_ext)
         sps->max_sub_layers = sps->vps->vps_max_sub_layers;
-    }
-    if (sps->max_sub_layers > HEVC_MAX_SUB_LAYERS) {
+
+    if (sps->max_sub_layers > sps->vps->vps_max_sub_layers) {
         av_log(avctx, AV_LOG_ERROR, "sps_max_sub_layers out of range: %d\n",
                sps->max_sub_layers);
         return AVERROR_INVALIDDATA;