diff --git a/decoder/drc_src/impd_drc_common.h b/decoder/drc_src/impd_drc_common.h index ce3396d..2da2542 100644 --- a/decoder/drc_src/impd_drc_common.h +++ b/decoder/drc_src/impd_drc_common.h @@ -151,6 +151,8 @@ extern "C" { #define PARAM_DRC_TYPE_LIM_ATTACK_DEFAULT 5 #define PARAM_DRC_TYPE_LIM_RELEASE_DEFAULT 50 +#define MAX_LOUDNESS_INFO_COUNT (16) + #define UNIDRCCONFEXT_V1 0x2 #define UNIDRCLOUDEXT_EQ 0x1 #define UNIDRCINTERFACEEXT_EQ 0x1 diff --git a/decoder/drc_src/impd_drc_selection_process_drcset_selection.c b/decoder/drc_src/impd_drc_selection_process_drcset_selection.c index 7ca8aec..370d169 100644 --- a/decoder/drc_src/impd_drc_selection_process_drcset_selection.c +++ b/decoder/drc_src/impd_drc_selection_process_drcset_selection.c @@ -775,6 +775,9 @@ WORD32 impd_drc_set_preselection( loudness_normalization_gain_db, loudness); if (err) return (err); + if (loudness_info_count > MAX_LOUDNESS_INFO_COUNT) + return UNEXPECTED_ERROR; + err = impd_signal_peak_level_info( pstr_drc_config, pstr_loudness_info, str_drc_instruction_str, requested_dwnmix_id[d], @@ -787,6 +790,7 @@ WORD32 impd_drc_set_preselection( for (l = 0; l < loudness_info_count; l++) { WORD32 match_found_flag = 0; WORD32 p; + if (k >= SELECTION_CANDIDATE_COUNT_MAX) return UNEXPECTED_ERROR; selection_candidate_info[k].loudness_norm_db_gain_adjusted = loudness_normalization_gain_db[l]; @@ -873,7 +877,6 @@ WORD32 impd_drc_set_preselection( !str_drc_instruction_str ->drc_set_target_loudness_present)) { k++; - } else { } } } @@ -913,6 +916,7 @@ WORD32 impd_drc_set_preselection( signal_peak_level[p] + loudness_normalization_gain_db[l] - pstr_drc_sel_proc_params_struct->output_peak_level_max); adjustment = min(adjustment, max(0.0f, loudness_deviation_max)); + if (k >= SELECTION_CANDIDATE_COUNT_MAX) return UNEXPECTED_ERROR; selection_candidate_info[k].loudness_norm_db_gain_adjusted = loudness_normalization_gain_db[l] - adjustment;