aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajat Kumar <rajat.kumar@ittiam.com>2019-12-31 13:02:02 +0530
committerRay Essick <essick@google.com>2020-01-28 16:55:45 -0800
commit3c5f6c039975047971a77ab2ec2369d0d987b031 (patch)
tree3a3153a451541ae498a4b0e5ede652d2edc51a1c
parentbd868287e9356fcb17141f18e0c5a9065b877930 (diff)
downloadlibxaac-3c5f6c039975047971a77ab2ec2369d0d987b031.tar.gz
Fix for memcpy-param-overlap in apply sbr function
ptr_sbr_qmf->filter_states memory is initialized based on down_sample_flag. But it's used irrespective of down_sample_flag values for few testcases. Therefore assigned maximum memory to ptr_sbr_qmf->filter_states as a fix in the current CL. Bug: 147028944 Test: poc in bug Change-Id: I84f9976645a53e09d638d214730801af4156962e
-rw-r--r--decoder/ixheaacd_process.c8
-rw-r--r--decoder/ixheaacd_sbrdec_initfuncs.c3
2 files changed, 9 insertions, 2 deletions
diff --git a/decoder/ixheaacd_process.c b/decoder/ixheaacd_process.c
index 4b610e8..1aae894 100644
--- a/decoder/ixheaacd_process.c
+++ b/decoder/ixheaacd_process.c
@@ -109,6 +109,7 @@ IA_ERRORCODE ixheaacd_esbr_process(ia_usac_data_struct *usac_data,
WORD32 stereo_config_idx,
WORD16 num_channels,
WORD32 audio_object_type) {
+ WORD32 ch;
WORD32 err_code = 0;
ia_aac_dec_sbr_bitstream_struct *esbr_bit_str = &usac_data->esbr_bit_str[0];
ia_handle_sbr_dec_inst_struct self = usac_data->pstr_esbr_dec;
@@ -127,6 +128,13 @@ IA_ERRORCODE ixheaacd_esbr_process(ia_usac_data_struct *usac_data,
self->sbr_mode = usac_data->sbr_mode;
self->aot_usac_flag = usac_data->usac_flag;
+ for (ch = 0; ch < num_channels; ch++) {
+ if ((self->pstr_sbr_channel[ch]
+ ->str_sbr_dec.str_synthesis_qmf_bank.qmf_filter_state_size) <
+ QMF_FILTER_STATE_SYN_SIZE)
+ return IA_FATAL_ERROR;
+ }
+
err_code = ixheaacd_applysbr(self, esbr_bit_str, NULL, &num_channels, 1, 0, 0,
&sbr_scratch_struct, 0, 1, 0, it_bit_buff, NULL,
0, audio_object_type);
diff --git a/decoder/ixheaacd_sbrdec_initfuncs.c b/decoder/ixheaacd_sbrdec_initfuncs.c
index 408dcf8..a5a2181 100644
--- a/decoder/ixheaacd_sbrdec_initfuncs.c
+++ b/decoder/ixheaacd_sbrdec_initfuncs.c
@@ -1027,14 +1027,13 @@ static PLATFORM_INLINE WORD32 ixheaacd_create_cplx_synt_qmfbank(
WORD32 qmf_filter_state_size;
memset(ptr_sbr_qmf, 0, sizeof(ia_sbr_qmf_filter_bank_struct));
+ qmf_filter_state_size = QMF_FILTER_STATE_SYN_SIZE;
if (down_sample_flag) {
L = NO_SYNTHESIS_CHANNELS_DOWN_SAMPLED;
- qmf_filter_state_size = QMF_FILTER_STATE_SYN_SIZE_DOWN_SAMPLED;
ptr_sbr_qmf->usb = NO_SYNTHESIS_CHANNELS_DOWN_SAMPLED;
} else {
L = NO_SYNTHESIS_CHANNELS;
- qmf_filter_state_size = QMF_FILTER_STATE_SYN_SIZE;
ptr_sbr_qmf->usb = usb;
}