Commit df2efc6c authored by Jan Kiene's avatar Jan Kiene
Browse files

Merge branch 'basop-2272-usan-oob-indexing-in-tcx_ltp_pitch_search_ivas-function' into 'main'

Resolve "USAN: OOB indexing in tcx_ltp_pitch_search_ivas function"

See merge request !2452
parents 2761da76 4e7de6c3
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@
/*#define FIX_I4_OL_PITCH*/                             /* fix open-loop pitch used for EVS core switching */
#define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR      /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH         /* FhG: fix OOB index USAN error in TCX LTP pitch search */
#define FIX_2274_OOB_INDEXING_IN_CORRMATRIX             /* FhG: fix OOB indexing complaint */
#define FIX_2278_OOB_INDEXING_IN_CLOSED_LOOP_PIT_SEARCH /* FhG: fix oob indexing USAN complaint */
#define FIX_2287_MCT_MDCT_STEREO_DATA_MALLOC_SIZE       /* FhG: correct allocation size for STEREO_MDCT_DEC_DATA struct */
+29 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
    EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0
  ====================================================================================*/

#include "cnst.h"
#include <stdint.h>
#include "options.h"
#ifdef DEBUGGING
@@ -113,6 +114,9 @@ static void tcx_ltp_pitch_search(
    int16_t *border_case )
{
    int16_t i, t, t0, t1, step, fraction, t0_min, t0_max, t_min, t_max, delta;
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
    int16_t cor_idx_ini, cor_idx;
#endif
    float temp, cor_max, cor[256], *pt_cor;

    if ( pitres == 6 )
@@ -195,7 +199,11 @@ static void tcx_ltp_pitch_search(
     * the interpolated normalized correlation.
     *-----------------------------------------------------------------*/

#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
    cor_idx_ini = L_INTERPOL1 - t0_min;
#else
    pt_cor = cor + L_INTERPOL1 - t0_min;
#endif
    t0 = t1;
    if ( t0 >= pitfr2 )
    {
@@ -211,15 +219,29 @@ static void tcx_ltp_pitch_search(
    if ( t0 == t0_min ) /* Limit case */
    {
        fraction = 0;
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
        cor_idx = cor_idx_ini + t0;
        cor_max = interpolate_corr( &cor[cor_idx], fraction, pitres );
#else
        cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres );
#endif
    }
    else /* Process negative fractions */
    {
        t0--;
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
        cor_idx = cor_idx_ini + t0;
        cor_max = interpolate_corr( &cor[cor_idx], fraction, pitres );
#else
        cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres );
#endif
        for ( i = ( fraction + step ); i <= pitres - 1; i = i + step )
        {
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
            temp = interpolate_corr( &cor[cor_idx], i, pitres );
#else
            temp = interpolate_corr( &pt_cor[t0], i, pitres );
#endif
            if ( temp > cor_max )
            {
                cor_max = temp;
@@ -228,9 +250,16 @@ static void tcx_ltp_pitch_search(
        }
    }

#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
    cor_idx = cor_idx_ini + t1;
#endif
    for ( i = 0; i <= pitres - 1; i = i + step ) /* Process positive fractions */
    {
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
        temp = interpolate_corr( &cor[cor_idx], i, pitres );
#else
        temp = interpolate_corr( &pt_cor[t1], i, pitres );
#endif
        if ( temp > cor_max )
        {
            cor_max = temp;