diff options
author | Lynne <dev@lynne.ee> | 2024-06-05 18:25:00 +0200 |
---|---|---|
committer | Lynne <dev@lynne.ee> | 2024-06-08 00:22:37 +0200 |
commit | 62cd6d9e596fd4e4f5ade39de36203b547b5250b (patch) | |
tree | 92a6930d0f2659c14c2f6527d39da0c9480fcaaf | |
parent | 5c328e6c1e56fdb12fcf3a89b18079ad983cbe5b (diff) | |
download | ffmpeg-62cd6d9e596fd4e4f5ade39de36203b547b5250b.tar.gz |
aacdec_usac: clean up nb_elems on error
Require that there is a valid layout with a valid number of channels
before accepting nb_elems.
The value is required when flushing.
Thanks to kasper93 for figuring it out.
-rw-r--r-- | libavcodec/aac/aacdec_usac.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libavcodec/aac/aacdec_usac.c b/libavcodec/aac/aacdec_usac.c index 5c3bb8d4ac..3a573ab573 100644 --- a/libavcodec/aac/aacdec_usac.c +++ b/libavcodec/aac/aacdec_usac.c @@ -401,6 +401,7 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, if (usac->nb_elems > 64) { av_log(ac->avctx, AV_LOG_ERROR, "Too many elements: %i\n", usac->nb_elems); + usac->nb_elems = 0; return AVERROR(EINVAL); } @@ -413,6 +414,7 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, (elem_id[0] + elem_id[1] + elem_id[2] + 1) > nb_channels) { av_log(ac->avctx, AV_LOG_ERROR, "Too many channels for the channel " "configuration\n"); + usac->nb_elems = 0; return AVERROR(EINVAL); } @@ -458,6 +460,7 @@ int ff_aac_usac_config_decode(AACDecContext *ac, AVCodecContext *avctx, ret = ff_aac_output_configure(ac, layout_map, elem_id[0] + elem_id[1] + elem_id[2], OC_GLOBAL_HDR, 0); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Unable to parse channel config!\n"); + usac->nb_elems = 0; return ret; } |