Commit 867348fd authored by multrus's avatar multrus
Browse files

fix for UBSAN issue in RC context mapping; this reflects changes from float,...

fix for UBSAN issue in RC context mapping; this reflects changes from float, and corrects the BASOP instrumentation/operators
parent d3508f9d
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@
#define FIX_2252_SCALING_SAVE_HB_SYNTH                  /* VA: issue 2252: fix use-of-uninit-value in save_hb_synth_fx[] scaling in FOA decoding with bitstream that starts with an SID */
#define FIX_2248_EVS_ASSERT                             /* VA: Include _sat in an EVS related part of the code */
#define FIX_2254_IMPROV_COMPLEXITY_BE                   /* VA: BE small complexity reduction  */
#define FIX_1464_UBSAN_RC_CONTEXT_MAP                   /* FhG: BE UBSAN fix for float issue 1464 in the TCX range coder */

/* #################### End BE switches ################################## */

+14 −0
Original line number Diff line number Diff line
@@ -588,7 +588,11 @@ Word16 RCcontextMapping_decode2_no_mem_s17_LCS_fx(
    ELSE /* if(!hm_cfg) */
    {
        Word16 c, rateQ;
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
        UWord32 s;
#else
        UWord16 s;
#endif

        /* Rate flag */
        IF( GT_16( nbbits, 400 ) )
@@ -613,7 +617,11 @@ Word16 RCcontextMapping_decode2_no_mem_s17_LCS_fx(
        t = 0;
        move16();
        s = 0;
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
        move32();
#else
        move16();
#endif
        /* Main Loop through the 2-tuples */
        FOR( k = 0; k < lastnz; k += 2 )
        {
@@ -701,9 +709,15 @@ Word16 RCcontextMapping_decode2_no_mem_s17_LCS_fx(
                c = add( 12, esc_nb );
            }

#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
            s = L_shl( s, 4 ); /*Shift old 4 bits*/
            s = L_add( s, c ); /*replace last 4 bits*/
            t = extract_l( L_and( s, 0xFF ) );
#else
            s = (UWord16) L_shl( s, 4 ); /*Shift old 4 bits*/
            s = (UWord16) L_add( s, c ); /*replace last 4 bits*/
            t = (UWord16) L_and( s, 0xFF );
#endif
        }

        /* Decode signs */
+26 −0
Original line number Diff line number Diff line
@@ -973,7 +973,11 @@ void RCcontextMapping_encode2_no_mem_s17_LCS_fx(
    {
        Word16 cp;
        Word16 esc_nb, rateQ;
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
        UWord32 s;
#else
        UWord16 s;
#endif

        /* Rate flag */
        IF( GT_16( nbbits, 400 ) )
@@ -988,7 +992,11 @@ void RCcontextMapping_encode2_no_mem_s17_LCS_fx(
        }

        s = 0;
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
        move32();
#else
        move16();
#endif

        /* Find last non-zero tuple */
        /* ensure termination of while loop by dummy value */
@@ -1099,8 +1107,13 @@ void RCcontextMapping_encode2_no_mem_s17_LCS_fx(
            }

            /*Shift old 4 bits, replace last 4 bits*/
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
            s = L_add( L_shl( s, 4 ), cp );
            t = extract_l( L_and( s, 0xFF ) );
#else
            s = (UWord16) ( L_add( L_shl( s, 4 ), cp ) );
            t = (UWord16) L_and( s, 0xFF );
#endif

        } /*end of the 2-tuples loop*/
    }
@@ -1453,7 +1466,11 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
    ELSE /* if (!hm_cfg) */
    {
        Word16 esc_nb, cp, rateQ;
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
        UWord32 s;
#else
        UWord16 s;
#endif
        Word16 tot_bits2;
        Word16 overflow_flag = 0;
        move16();
@@ -1473,7 +1490,11 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
        t = 0;
        move16();
        s = 0;
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
        move32();
#else
        move16();
#endif
        cp = 0;
        move16();
        lastnz = 1;
@@ -1564,8 +1585,13 @@ Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS_fx(
                cp = add( 12, esc_nb ); /* Q0 */
            }
            /*shift old bits and replace last 4 bits*/
#ifdef FIX_1464_UBSAN_RC_CONTEXT_MAP
            s = L_add( L_shl( s, 4 ), cp );
            t = extract_l( L_and( s, 0xFF ) );
#else
            s = (UWord16) L_add( L_shl( s, 4 ), cp );
            t = s_and( s, 0xFF );
#endif
        } /*end of the 2-tuples loop*/

        tot_bits2 = round_fx( W_shl_sat_l( nbits2_fx, -Q7 ) );                   /* Q23 -> Q16 -> Q0 */