Skip to content

USAN: division by zero in DFt-Stereo DTX with frameloss

Git SHA: 4d1583db

Running the self_test_ltv.prm file with USAN build, this new error was reported:

lib_dec/ivas_stereo_dft_dec.c:2960:112: runtime error: division by zero
SUMMARY: UndefinedBehaviorSanitizer: float-divide-by-zero lib_dec/ivas_stereo_dft_dec.c:2960:112 in 

Reproduce with:

make clean
make -j CLANG=3
./IVAS_cod -stereo -dtx 13200 16 ltv16_STEREO.wav bit
eid-xor -fer -vbr  bit scripts/dly_error_profiles/ep_5pct.g192 bit_err
./IVAS_dec stereo 16 bit_err out.wav

The error happens in ivas_stereo_dft_dec.c:2960:

        if ( hStereoDft->frame_sid_nodata )
        {
            /* set new xfade target if new itd received */
            if ( hStereoDft->gipd[k + k_offset] != hStereoDft->ipd_xfade_target )
            {
                if ( ( hStereoDft->gipd[k + k_offset] - hStereoDft->ipd_xfade_prev ) > EVS_PI )
                {
                    hStereoDft->ipd_xfade_target = hStereoDft->gipd[k + k_offset] - 2 * EVS_PI;
                    hStereoDft->ipd_xfade_step = ( hStereoDft->ipd_xfade_target - hStereoDft->ipd_xfade_prev ) / ( STEREO_DFT_ITD_CNG_XFADE - hStereoDft->ipd_xfade_counter );
                }
                else if ( ( hStereoDft->ipd_xfade_prev - hStereoDft->gipd[k + k_offset] ) > EVS_PI )
                {
                    hStereoDft->ipd_xfade_target = hStereoDft->gipd[k + k_offset] + 2 * EVS_PI;
                    hStereoDft->ipd_xfade_step = ( hStereoDft->ipd_xfade_target - hStereoDft->ipd_xfade_prev ) / ( STEREO_DFT_ITD_CNG_XFADE - hStereoDft->ipd_xfade_counter ); // <---------- faulty line
                }

On the affected line, hStereoDft->ipd_xfade_counter is 100, which is the same as STEREO_DFT_ITD_CNG_XFADE causing the zero in the denominator here.