[svn-commits] kharwell: branch 12 r425030 - in /branches/12: ./ res/res_rtp_asterisk.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Oct 9 16:28:17 CDT 2014


Author: kharwell
Date: Thu Oct  9 16:28:15 2014
New Revision: 425030

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=425030
Log:
res_rtp_asterisk: Crash if no candidates received for component

When starting ice if there is not at least one remote ice candidate with an RTP
component asterisk will crash. This is due to an assertion in pjnath as it
expects at least one candidate with an RTP component. Added a check to make
sure at least one candidate contains an RTP component and at least one candidate
has an RTCP component.

ASTERISK-24383 #close
Review: https://reviewboard.asterisk.org/r/4039/
........

Merged revisions 425029 from http://svn.asterisk.org/svn/asterisk/branches/11

Modified:
    branches/12/   (props changed)
    branches/12/res/res_rtp_asterisk.c

Propchange: branches/12/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Modified: branches/12/res/res_rtp_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/res/res_rtp_asterisk.c?view=diff&rev=425030&r1=425029&r2=425030
==============================================================================
--- branches/12/res/res_rtp_asterisk.c (original)
+++ branches/12/res/res_rtp_asterisk.c Thu Oct  9 16:28:15 2014
@@ -643,7 +643,7 @@
 	pj_ice_sess_cand candidates[PJ_ICE_MAX_CAND];
 	struct ao2_iterator i;
 	struct ast_rtp_engine_ice_candidate *candidate;
-	int cand_cnt = 0;
+	int cand_cnt = 0, has_rtp = 0, has_rtcp = 0;
 
 	if (!rtp->ice || !rtp->ice_proposed_remote_candidates) {
 		return;
@@ -675,6 +675,10 @@
 	while ((candidate = ao2_iterator_next(&i)) && (cand_cnt < PJ_ICE_MAX_CAND)) {
 		pj_str_t address;
 
+		/* there needs to be at least one rtp and rtcp candidate in the list */
+		has_rtp |= candidate->id == AST_RTP_ICE_COMPONENT_RTP;
+		has_rtcp |= candidate->id == AST_RTP_ICE_COMPONENT_RTCP;
+
 		pj_strdup2(rtp->ice->pool, &candidates[cand_cnt].foundation, candidate->foundation);
 		candidates[cand_cnt].comp_id = candidate->id;
 		candidates[cand_cnt].prio = candidate->priority;
@@ -705,7 +709,9 @@
 
 	ao2_iterator_destroy(&i);
 
-	if (pj_ice_sess_create_check_list(rtp->ice, &ufrag, &passwd, ao2_container_count(rtp->ice_active_remote_candidates), &candidates[0]) == PJ_SUCCESS) {
+	if (has_rtp && has_rtcp &&
+	    pj_ice_sess_create_check_list(rtp->ice, &ufrag, &passwd, ao2_container_count(
+						  rtp->ice_active_remote_candidates), &candidates[0]) == PJ_SUCCESS) {
 		ast_test_suite_event_notify("ICECHECKLISTCREATE", "Result: SUCCESS");
 		pj_ice_sess_start_check(rtp->ice);
 		pj_timer_heap_poll(timer_heap, NULL);




More information about the svn-commits mailing list