From fd74b55c364e9fe2b9071a7af0d6e789c4455ea4 Mon Sep 17 00:00:00 2001 From: rhb Date: Fri, 26 Jan 2024 16:40:24 +0100 Subject: [PATCH] fix USAN error in IGF arithmetic decoder --- lib_com/options.h | 1 + lib_dec/igf_scf_dec.c | 10 ++++++++++ 2 files changed, 11 insertions(+) mode change 100644 => 100755 lib_dec/igf_scf_dec.c diff --git a/lib_com/options.h b/lib_com/options.h index 94b49b8481..eae91932e6 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -161,6 +161,7 @@ #define FIX_957_REMOVE_PANNING_DEAD_CODE /* VA: Remove obsolete non-diegetic panning related code. */ #define FIX_956_DECODER_COMMAND_LINE_FIX /* VA: Output correct error message when the decoder command-line has too many mandatory arguments. */ #define FIX_955_FASTCONV_REND_IN_ISM /* VA: put FastConv rendering call under DEBUGGING */ +#define FIX_969_USAN_IGF_ARITH /* FhG: issue 969: fix USAN error in igf_sce_dec; same issue as #962 */ /* #################### End BE switches ################################## */ diff --git a/lib_dec/igf_scf_dec.c b/lib_dec/igf_scf_dec.c old mode 100644 new mode 100755 index f152f637a0..a8162c6443 --- a/lib_dec/igf_scf_dec.c +++ b/lib_dec/igf_scf_dec.c @@ -211,7 +211,12 @@ static void decode_sfe_vector( | c b | e --> t */ +#ifdef FIX_969_USAN_IGF_ARITH + int16_t pred; + uint16_t pred_tmp; +#else uint16_t pred; +#endif int16_t f, ctx, ctx_f, ctx_t; for ( f = 0; f < length; f++ ) @@ -221,7 +226,12 @@ static void decode_sfe_vector( if ( f == 0 ) { /* decode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ +#ifdef FIX_969_USAN_IGF_ARITH + ari_decode_14bits_s27_ext( st, &pred_tmp, &hPrivateData->acState, hPrivateData->cf_se00 ); + pred = (int16_t) pred_tmp; +#else ari_decode_14bits_s27_ext( st, &pred, &hPrivateData->acState, hPrivateData->cf_se00 ); +#endif x[f] = pred << 2; x[f] += arith_decode_bits( &hPrivateData->acState, st, 2 ); /* LSBs as 2 bit raw */ } -- GitLab