Commit 3faebf20 authored by fotopoulou's avatar fotopoulou
Browse files

Merge branch '1001-usan-signed-integer-overflow-in-ari_hm-c' into 'main'

Resolve "USAN: signed integer overflow in ari_hm.c"

See merge request !1401
parents 28f1f9e3 2b5bfab0
Loading
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -205,7 +205,11 @@ int16_t CountIndexBits(
 *-------------------------------------------------------------------*/

int16_t tcx_hm_render(
#ifdef FIX_1001_ARI_HM_OVERFLOW
    const int32_t lag, /* i  : pitch lag                             */
#else
    const int16_t lag, /* i  : pitch lag                             */
#endif
    const int16_t fract_res, /* i  : fractional resolution of the lag      */
    Word16 p[]               /* o  : harmonic model (Q13)                  */
)
@@ -265,7 +269,11 @@ int16_t tcx_hm_render(

void tcx_hm_modify_envelope(
    const Word16 gain, /* i  : HM gain (Q11)                         */
#ifdef FIX_1001_ARI_HM_OVERFLOW
    const int32_t lag,
#else
    const int16_t lag,
#endif
    const int16_t fract_res,
    const Word16 p[],     /* i  : harmonic model (Q13)                  */
    Word32 env[],         /* i/o: envelope (Q16)                        */
+2 −0
Original line number Diff line number Diff line
@@ -158,6 +158,8 @@
#define FIX_997_REMOVE_SPAR_DEC_UPMIXER                 /* VA: issue 997: remove obsolete function ivas_spar_dec_upmixer() */
#define FIX_944_REMOVE_LS_RENDERER_CALL_IN_STEREO       /* VA: issue 994: remove an obsolete call of function ivas_ls_setup_conversion() in stereo */
#define FIX_1003_PARAMISM_BINAURAL_RECONFIG_USAN        /* FhG: fix for #1003: fix USAN caused by ParamISM reconfig                    */
#define FIX_1001_ARI_HM_OVERFLOW                        /* FhG: fix for undef behaviour in in the harmonic TCX model arithmetic coder */



/* #################### End BE switches ################################## */
+9 −1
Original line number Diff line number Diff line
@@ -7832,14 +7832,22 @@ int16_t DecodeIndex(
#define GET_ADJ2( T, L, F ) ( ( ( L ) << ( F ) ) - ( T ) )

int16_t tcx_hm_render(
#ifdef FIX_1001_ARI_HM_OVERFLOW
    const int32_t lag, /* i  : pitch lag                             */
#else
    const int16_t lag, /* i  : pitch lag                             */
#endif
    const int16_t fract_res, /* i  : fractional resolution of the lag      */
    Word16 p[]               /* o  : harmonic model (Q13)                  */
);

void tcx_hm_modify_envelope(
    const Word16 gain, /* i  : HM gain (Q11)                         */
#ifdef FIX_1001_ARI_HM_OVERFLOW
    const int32_t lag,
#else
    const int16_t lag,
#endif
    const int16_t fract_res,
    const Word16 p[],     /* i  : harmonic model (Q13)                  */
    Word32 env[],         /* i/o: envelope (Q16)                        */
+8 −0
Original line number Diff line number Diff line
@@ -120,7 +120,11 @@ void tcx_hm_decode(
    int16_t *hm_bits           /* o  : bit consumption               */
)
{
#ifdef FIX_1001_ARI_HM_OVERFLOW
    int32_t lag;
#else
    int16_t lag;
#endif
    int32_t tmpL;
    int16_t NumTargetBits, fract_res;
    Word16 p[2 * kTcxHmParabolaHalfWidth + 1], gain;
@@ -144,7 +148,11 @@ void tcx_hm_decode(

    /* Convert the index to lag */
    UnmapIndex( prm_hm[1], L_frame >= 256, LtpPitchLag, ( NumTargetBits <= kSmallerLagsTargetBitsThreshold ) || ( L_frame < 256 ), &fract_res, &tmpL );
#ifdef FIX_1001_ARI_HM_OVERFLOW
    lag = tmpL;
#else
    lag = (int16_t) tmpL;
#endif

    /* Render the harmonic model */
    if ( tcx_hm_render( lag, fract_res, p ) )
+16 −0
Original line number Diff line number Diff line
@@ -418,7 +418,11 @@ static void PeakFilter(
static float tcx_hm_get_re(
    const float x[],   /* i  : absolute spectrum               */
    const Word16 gain, /* i  : HM gain (Q11)                   */
#ifdef FIX_1001_ARI_HM_OVERFLOW
    const int32_t lag,
#else
    const int16_t lag,
#endif
    const int16_t fract_res,
    const Word16 p[],     /* i  : harmonic model (Q13)            */
    const Word32 env[],   /* i  : envelope (Q16)                  */
@@ -467,7 +471,11 @@ static float tcx_hm_get_re(
static void tcx_hm_quantize_gain(
    const float x[],    /* i  : absolute spectrum                     */
    const Word32 env[], /* i  : envelope (Q16)                        */
#ifdef FIX_1001_ARI_HM_OVERFLOW
    const int32_t lag,
#else
    const int16_t lag,
#endif
    const int16_t fract_res,
    Word16 p[],               /* i  : harmonic model (Q13)                  */
    const int16_t L_frame,    /* i  : number of spectral lines              */
@@ -557,7 +565,11 @@ void tcx_hm_analyse(
    int16_t *hm_bits            /* o  : bit consumption               */
)
{
#ifdef FIX_1001_ARI_HM_OVERFLOW
    int32_t lag;
#else
    int16_t lag;
#endif
    int32_t tmpL;
    int16_t fract_res;
    float fspec[N_MAX_ARI], RelativeScore;
@@ -583,7 +595,11 @@ void tcx_hm_analyse(

    /* Convert the index to lag */
    UnmapIndex( prm_hm[1], L_frame >= 256, LtpPitchLag, ( targetBits - *hm_bits <= kSmallerLagsTargetBitsThreshold ) || ( L_frame < 256 ), &fract_res, &tmpL );
#ifdef FIX_1001_ARI_HM_OVERFLOW
    lag = tmpL;
#else
    lag = (int16_t) tmpL;
#endif

    /* Render harmonic model */
    tcx_hm_render( lag, fract_res, p );