From 2f570094b7a59655aadbcd911e32b3857d28ad44 Mon Sep 17 00:00:00 2001
From: Jonathan Rose <jrose@digium.com>
Date: Thu, 2 Oct 2014 15:33:50 +0000
Subject: [PATCH] chan_pjsip: Fix an assertion for channels that lack formats
 on creation

ASTERISK-24222 #close
Reported by: Mark Michelson
Review: https://reviewboard.asterisk.org/r/4017/
........

Merged revisions 424333 from http://svn.asterisk.org/svn/asterisk/branches/13


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424358 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_pjsip.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index b8fb35c358..015cd64484 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -371,7 +371,6 @@ static struct ast_channel *chan_pjsip_new(struct ast_sip_session *session, int s
 {
 	struct ast_channel *chan;
 	struct ast_format_cap *caps;
-	struct ast_format *fmt;
 	RAII_VAR(struct chan_pjsip_pvt *, pvt, NULL, ao2_cleanup);
 	struct ast_sip_channel_pvt *channel;
 	struct ast_variable *var;
@@ -418,16 +417,20 @@ static struct ast_channel *chan_pjsip_new(struct ast_sip_session *session, int s
 
 	ast_channel_nativeformats_set(chan, caps);
 
-	/*
-	 * XXX Probably should pick the first audio codec instead
-	 * of simply the first codec.  The first codec may be video.
-	 */
-	fmt = ast_format_cap_get_format(caps, 0);
-	ast_channel_set_writeformat(chan, fmt);
-	ast_channel_set_rawwriteformat(chan, fmt);
-	ast_channel_set_readformat(chan, fmt);
-	ast_channel_set_rawreadformat(chan, fmt);
-	ao2_ref(fmt, -1);
+	if (!ast_format_cap_empty(caps)) {
+		/*
+		 * XXX Probably should pick the first audio codec instead
+		 * of simply the first codec.  The first codec may be video.
+		 */
+		struct ast_format *fmt = ast_format_cap_get_format(caps, 0);
+
+		ast_channel_set_writeformat(chan, fmt);
+		ast_channel_set_rawwriteformat(chan, fmt);
+		ast_channel_set_readformat(chan, fmt);
+		ast_channel_set_rawreadformat(chan, fmt);
+		ao2_ref(fmt, -1);
+	}
+
 	ao2_ref(caps, -1);
 
 	if (state == AST_STATE_RING) {
-- 
GitLab