From fc794de75658a26383dd93278f2b04b13bc3f65b Mon Sep 17 00:00:00 2001
From: Sean Bright <sean.bright@gmail.com>
Date: Mon, 20 Mar 2017 17:27:24 -0400
Subject: [PATCH] bridge_softmix: Ignore non-voice frames from translator

Some codecs - codec_speex specifically - take voice frames and return
other types of frames, like CNG. If we subsequently treat those as
voice frames, we'll run into trouble when destroying the frame because
of the requirement that each voice frame have an associated format.

ASTERISK-26880 #close
Reported by: Kirsty Tyerman

Change-Id: I43f8450c48fb276ad8b99db8512be82949c1ca7c
---
 bridges/bridge_softmix.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c
index 7bac4fcb2a..94dfc57142 100644
--- a/bridges/bridge_softmix.c
+++ b/bridges/bridge_softmix.c
@@ -222,7 +222,8 @@ static void softmix_process_write_audio(struct softmix_translate_helper *trans_h
 		if (entry->trans_pvt && !entry->out_frame) {
 			entry->out_frame = ast_translate(entry->trans_pvt, &sc->write_frame, 0);
 		}
-		if (entry->out_frame && (entry->out_frame->datalen < MAX_DATALEN)) {
+		if (entry->out_frame && entry->out_frame->frametype == AST_FRAME_VOICE
+				&& entry->out_frame->datalen < MAX_DATALEN) {
 			ao2_replace(sc->write_frame.subclass.format, entry->out_frame->subclass.format);
 			memcpy(sc->final_buf, entry->out_frame->data.ptr, entry->out_frame->datalen);
 			sc->write_frame.datalen = entry->out_frame->datalen;
-- 
GitLab