Commit a93ba0ffaa for aom

commit a93ba0ffaacd5f576a241bf739110e65287e516d
Author: Marco Paniconi <marpan@google.com>
Date:   Sun Apr 19 20:41:07 2026 -0700

    svc: Check for invalid params for svc layer id setting

    Return AOM_CODEC_INVALID_PARAM if the spatial or
    temporal layer id is set to be below 0 or above
    the configured setting. Update the documentation
    of the control.

    Bug: 503975732, 503993984, 503993985
    Change-Id: Idb30133e116bddb8ac869bb7dcf37a4b99c12f64

diff --git a/aom/aomcx.h b/aom/aomcx.h
index 7c7ad7bebd..1c344f70f3 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -198,7 +198,9 @@ enum aome_enc_control_id {
   AOME_SET_SCALEMODE = 11,

   /*!\brief Codec control function to set encoder spatial layer id, int
-   * parameter.
+   * parameter. Spatial layer id must be within valid range of 0 to the
+   * allowed number of spatial layers, set via the control
+   * AV1E_SET_SVC_PARAMS, or via AOME_SET_SPATIAL_LAYER_ID.
    */
   AOME_SET_SPATIAL_LAYER_ID = 12,

@@ -1289,7 +1291,9 @@ enum aome_enc_control_id {
   /* NOTE: enums 145-149 unused */

   /*!\brief Codec control function to set the layer id, aom_svc_layer_id_t*
-   * parameter
+   * parameter. Layer id for spatial or temporal layer must be within valid
+   * range of 0 to the allowed number of spatial or temporal layers, set via
+   * the control AV1E_SET_SVC_PARAMS, or via AOME_SET_SPATIAL_LAYER_ID.
    */
   AV1E_SET_SVC_LAYER_ID = 131,

diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 3b63df5740..1ab5822abb 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -4034,7 +4034,8 @@ static aom_codec_err_t ctrl_set_scale_mode(aom_codec_alg_priv_t *ctx,
 static aom_codec_err_t ctrl_set_spatial_layer_id(aom_codec_alg_priv_t *ctx,
                                                  va_list args) {
   const int spatial_layer_id = va_arg(args, int);
-  if (spatial_layer_id >= MAX_NUM_SPATIAL_LAYERS)
+  if (spatial_layer_id < 0 ||
+      spatial_layer_id >= (int)ctx->ppi->number_spatial_layers)
     return AOM_CODEC_INVALID_PARAM;
   ctx->ppi->cpi->common.spatial_layer_id = spatial_layer_id;
   return AOM_CODEC_OK;
@@ -4064,6 +4065,11 @@ static aom_codec_err_t ctrl_set_number_spatial_layers(aom_codec_alg_priv_t *ctx,
 static aom_codec_err_t ctrl_set_layer_id(aom_codec_alg_priv_t *ctx,
                                          va_list args) {
   aom_svc_layer_id_t *const data = va_arg(args, aom_svc_layer_id_t *);
+  if (data->spatial_layer_id < 0 || data->temporal_layer_id < 0 ||
+      data->spatial_layer_id >= (int)ctx->ppi->number_spatial_layers ||
+      data->temporal_layer_id >= (int)ctx->ppi->number_temporal_layers) {
+    return AOM_CODEC_INVALID_PARAM;
+  }
   ctx->ppi->cpi->common.spatial_layer_id = data->spatial_layer_id;
   ctx->ppi->cpi->common.temporal_layer_id = data->temporal_layer_id;
   ctx->ppi->cpi->svc.spatial_layer_id = data->spatial_layer_id;