From d17bc7b3a8bce2c507a2e72459b34c07b7fdcd52 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Mon, 17 Aug 2015 15:19:57 +0200 Subject: [PATCH] mgcp: Avoid crashing when rtpmap is not complete The NAT sends an incomplete SDP file for the purpose of informing the BSC about the remote IP/PORT early. The case of an incomplete SDP file was not considered. Check if there is a codec and if not skip it. TODO: We need to have a better end-point life cycle test. --- openbsc/src/libmgcp/mgcp_sdp.c | 3 +++ openbsc/tests/mgcp/mgcp_test.c | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/openbsc/src/libmgcp/mgcp_sdp.c b/openbsc/src/libmgcp/mgcp_sdp.c index 33837b9af..aa4ef3054 100644 --- a/openbsc/src/libmgcp/mgcp_sdp.c +++ b/openbsc/src/libmgcp/mgcp_sdp.c @@ -159,6 +159,9 @@ int is_codec_compatible(struct mgcp_endpoint *endp, struct sdp_rtp_map *codec) char *bts_codec; char audio_codec[64]; + if (!codec->codec_name) + return 0; + /* * GSM, GSM/8000 and GSM/8000/1 should all be compatible.. let's go * by name first. diff --git a/openbsc/tests/mgcp/mgcp_test.c b/openbsc/tests/mgcp/mgcp_test.c index d5018591b..df2ab29ae 100644 --- a/openbsc/tests/mgcp/mgcp_test.c +++ b/openbsc/tests/mgcp/mgcp_test.c @@ -350,7 +350,7 @@ static void test_strline(void) "v=0\r\n" \ "o=- 1439038275 1439038275 IN IP4 192.168.181.247\r\n" \ "s=-\r\nc=IN IP4 192.168.181.247\r\n" \ - "t=0 0\r\nm=audio 29084 RTP/AVP 0 8 3 18 4 96 97 101\r\n" \ + "t=0 0\r\nm=audio 29084 RTP/AVP 255 0 8 3 18 4 96 97 101\r\n" \ "a=rtpmap:0 PCMU/8000\r\n" \ "a=rtpmap:8 PCMA/8000\r\n" \ "a=rtpmap:3 gsm/8000\r\n" \ @@ -1068,8 +1068,8 @@ static void test_multilple_codec(void) OSMO_ASSERT(last_endpoint == 5); endp = &cfg->trunk.endpoints[last_endpoint]; - OSMO_ASSERT(endp->net_end.codec.payload_type == 0); - OSMO_ASSERT(endp->net_end.alt_codec.payload_type == 8); + OSMO_ASSERT(endp->net_end.codec.payload_type == 255); + OSMO_ASSERT(endp->net_end.alt_codec.payload_type == 0); talloc_free(cfg); }