diff --git a/lib_com/options.h b/lib_com/options.h index b35772ecc107f07e911c782b88287393e5eea71d..886c8e5acb6191e2cf62e354c224b0319e53d578 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -211,6 +211,8 @@ #define FIX_622_SILENCE_USAN_WARNING /* FhG: silenceusan warning in ifft code */ #define FIX_615_UBSAN_SPAR_TO_DIRAC /*Dlb : Fix for UBSAN issue 615*/ +#define FIX_616_DIV_ZERO_MCT /*FhG : Fix UBSAN division by zero error of issue 616*/ + /* ################## End BE DEVELOPMENT switches ######################### */ diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c old mode 100755 new mode 100644 index 0c98f82d056c14fdccb22168f313ba6963a80b52..99eb1d9eb54c821911b006c5fcfeb7f89b2c34ad --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -143,8 +143,13 @@ static void AdjustChannelRatios( } for ( i = 3; i < nChannels; i++ ) { +#ifdef FIX_616_DIV_ZERO_MCT + cur_ratio = (float) chBitRatios[i] / ( sum_ratio + FLT_MIN ); + tar_ratio = (float) force_ch_bit_ratios[i] / ( sum_tar_ratio + FLT_MIN ); +#else cur_ratio = (float) chBitRatios[i] / sum_ratio; tar_ratio = (float) force_ch_bit_ratios[i] / sum_tar_ratio; +#endif tar_ratio = min( tar_ratio, cur_ratio ); chBitRatios[i] = (int16_t) ( tar_ratio * sum_tar_ratio );