From 7dd77c781e7ac336515b28d5cd3060a44c06c6ef Mon Sep 17 00:00:00 2001 From: Piotr Gregor Date: Thu, 7 Apr 2016 00:17:21 +0100 Subject: [PATCH] FS-9028: [avmd] Check SMA buffer Now SMA buffer is checked for successful memory allocation dynamically with assertion omitted. --- src/mod/applications/mod_avmd/avmd_sma_buf.h | 2 - src/mod/applications/mod_avmd/mod_avmd.c | 42 ++++++++++++++------ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/mod/applications/mod_avmd/avmd_sma_buf.h b/src/mod/applications/mod_avmd/avmd_sma_buf.h index 0fcc451dab..2871cc9b7d 100644 --- a/src/mod/applications/mod_avmd/avmd_sma_buf.h +++ b/src/mod/applications/mod_avmd/avmd_sma_buf.h @@ -32,8 +32,6 @@ typedef struct { (void)memset((b), 0, sizeof(sma_buffer_t)); \ (b)->len = (l); \ (b)->data = (BUFF_TYPE *)switch_core_session_alloc((s), sizeof(BUFF_TYPE) * (l)); \ - assert((b)->data != NULL); \ - (void)memset((b)->data, 0, sizeof(BUFF_TYPE) * (l)); \ (b)->sma = 0.0; \ (b)->pos = 0; \ (b)->lpos = 0; \ diff --git a/src/mod/applications/mod_avmd/mod_avmd.c b/src/mod/applications/mod_avmd/mod_avmd.c index bd2ff7c45d..2715f8c24a 100644 --- a/src/mod/applications/mod_avmd/mod_avmd.c +++ b/src/mod/applications/mod_avmd/mod_avmd.c @@ -163,8 +163,10 @@ static void init_avmd_session_data(avmd_session_t *avmd_session, static void init_avmd_session_data(avmd_session_t *avmd_session, switch_core_session_t *fs_session) { - /*! This is a worst case sample rate estimate */ - avmd_session->rate = 48000; + size_t buf_sz; + + /*! This is a worst case sample rate estimate */ + avmd_session->rate = 48000; INIT_CIRC_BUFFER(&avmd_session->b, (size_t)BEEP_LEN(avmd_session->rate), (size_t)FRAME_LEN(avmd_session->rate), @@ -184,16 +186,32 @@ static void init_avmd_session_data(avmd_session_t *avmd_session, avmd_session->samples_streak = SAMPLES_CONSECUTIVE_STREAK; #endif avmd_session->sample_count = 0; - INIT_SMA_BUFFER( - &avmd_session->sma_b, - BEEP_LEN(avmd_session->rate) / SINE_LEN(avmd_session->rate), - fs_session - ); - INIT_SMA_BUFFER( - &avmd_session->sqa_b, - BEEP_LEN(avmd_session->rate) / SINE_LEN(avmd_session->rate), - fs_session - ); + + buf_sz = BEEP_LEN(avmd_session->rate) / SINE_LEN(avmd_session->rate); + if (buf_sz < 1) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), + SWITCH_LOG_ERROR, "Failed to init avmd session." + " SMA buffer size is 0!\n"); + return; + } + + INIT_SMA_BUFFER(&avmd_session->sma_b, buf_sz, fs_session); + if (avmd_session->sma_b.data == NULL) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), + SWITCH_LOG_ERROR, "Failed to init avmd session." + " SMA buffer error\n"); + return; + } + memset(avmd_session->sma_b.data, 0, sizeof(BUFF_TYPE) * buf_sz); + + INIT_SMA_BUFFER(&avmd_session->sqa_b, buf_sz, fs_session); + if (avmd_session->sqa_b.data == NULL) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), + SWITCH_LOG_ERROR, "Failed to init avmd session." + " SMA sqa buffer error\n"); + return; + } + memset(avmd_session->sqa_b.data, 0, sizeof(BUFF_TYPE) * buf_sz); }