Admin message

WARNING! Gitlab maintenance operation scheduled for Monday, 20 April between 12:00 and 14:00 (CET). During this time window, short service interruptions (less than 5 minutes) may occur. Thank you in advance for your understanding.

Wrong length used for copying of array in ivas_mdct_core_invQ

In the function ivas_mdct_core_invQ, there is this code part:

    /* temporarily restore LR representation of previous frame for PLC mode decision (done on the individual channels) */
    if ( bfi && !MCT_flag && ( hCPE->hStereoMdct->mdct_stereo_mode[0] > SMDCT_DUAL_MONO || hCPE->hStereoMdct->mdct_stereo_mode[1] > SMDCT_DUAL_MONO ) )
    {
        L_frameTCX[0] = sts[0]->L_frameTCX_past;
        L_frameTCX[1] = sts[1]->L_frameTCX_past;
        mvr2r( sts[0]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[0], L_frameTCX[0] );
        mvr2r( sts[1]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[1], L_frameTCX[0] ); // <-- should be L_frameTCX[1] here?

In the second call to mvr2r, the spec length of channel 0 is used, even though channel 1 is copied. This is likely a typo. In BASOP, the correct index is used.

The buffer has a static length, so no risk of oob writing here. If L_frameTCX[0] is smaller than L_frameTCX[1], this could miss out on copying parts of the signal.

Assignee Loading
Time tracking Loading