]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9028: [avmd] Check SMA buffer
authorPiotr Gregor <piotrek.gregor@gmail.com>
Wed, 6 Apr 2016 23:17:21 +0000 (00:17 +0100)
committerPiotr Gregor <piotrek.gregor@gmail.com>
Thu, 7 Apr 2016 15:10:34 +0000 (16:10 +0100)
Now SMA buffer is checked for successful memory
allocation dynamically with assertion omitted.

src/mod/applications/mod_avmd/avmd_sma_buf.h
src/mod/applications/mod_avmd/mod_avmd.c

index 0fcc451dab6fdaa9a20220c39fa997c0401e23b1..2871cc9b7dc5e8f90a54c9553120d4bc643c75a2 100644 (file)
@@ -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; \
index bd2ff7c45d9d67fee755213f23de2103295079f1..2715f8c24a6e91cad0d5197faac36b0c2fde9a12 100644 (file)
@@ -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);
 }