Cover bass_setup unsuccessful search and btd_device_get_service. This change is motivated by the other usages where checks for NULL exist. --- profiles/audio/a2dp.c | 45 ++++++++++++++++++++++++++++++++---------- profiles/audio/avrcp.c | 24 +++++++++++++++++++--- profiles/audio/bass.c | 5 +++++ 3 files changed, 61 insertions(+), 13 deletions(-) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c index 6204006d6..56a035c7e 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c @@ -646,6 +646,24 @@ static gboolean auto_config(gpointer data) struct btd_service *service; struct a2dp_stream *stream; + dev = avdtp_get_device(setup->session); + + if (setup->sep->type == AVDTP_SEP_TYPE_SOURCE) { + service = btd_device_get_service(dev, A2DP_SINK_UUID); + + if (service == NULL) { + error("a2dp sink service not found"); + return FALSE; + } + } else { + service = btd_device_get_service(dev, A2DP_SOURCE_UUID); + + if (service == NULL) { + error("a2dp source service not found"); + return FALSE; + } + } + /* Check if configuration was aborted */ stream = queue_find(setup->sep->streams, match_stream, setup->stream); if (!stream) @@ -654,16 +672,12 @@ static gboolean auto_config(gpointer data) if (setup->err != NULL) goto done; - dev = avdtp_get_device(setup->session); - avdtp_stream_add_cb(setup->session, setup->stream, stream_state_changed, setup->sep); if (setup->sep->type == AVDTP_SEP_TYPE_SOURCE) { - service = btd_device_get_service(dev, A2DP_SINK_UUID); sink_new_stream(service, setup->session, setup->stream); } else { - service = btd_device_get_service(dev, A2DP_SOURCE_UUID); source_new_stream(service, setup->session, setup->stream); } @@ -995,10 +1009,25 @@ static void setconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep, struct btd_service *service; int ret; - if (a2dp_sep->type == AVDTP_SEP_TYPE_SINK) + dev = avdtp_get_device(session); + + if (a2dp_sep->type == AVDTP_SEP_TYPE_SINK) { DBG("Sink %p: Set_Configuration_Cfm", sep); - else + service = btd_device_get_service(dev, A2DP_SOURCE_UUID); + + if (service == NULL) { + error("a2dp source service not found"); + return; + } + } else { DBG("Source %p: Set_Configuration_Cfm", sep); + service = btd_device_get_service(dev, A2DP_SINK_UUID); + + if (service == NULL) { + error("a2dp sink service not found"); + return; + } + } setup = find_setup_by_session(session); @@ -1024,14 +1053,10 @@ static void setconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep, if (!setup) return; - dev = avdtp_get_device(session); - /* Notify D-Bus interface of the new stream */ if (a2dp_sep->type == AVDTP_SEP_TYPE_SOURCE) { - service = btd_device_get_service(dev, A2DP_SINK_UUID); sink_new_stream(service, session, setup->stream); } else { - service = btd_device_get_service(dev, A2DP_SOURCE_UUID); source_new_stream(service, session, setup->stream); } diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c index ba191e441..08edeac40 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -3082,8 +3082,14 @@ static void set_ct_player(struct avrcp *session, struct avrcp_player *player) if (session->controller->player == player) goto done; - session->controller->player = player; service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID); + + if (service == NULL) { + error("avrcp target service not found"); + return; + } + + session->controller->player = player; control_set_player(service, player ? media_player_get_path(player->user_data) : NULL); @@ -4278,12 +4284,18 @@ static void target_init(struct avrcp *session) if (session->target != NULL) return; + service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID); + + if (service == NULL) { + error("avrcp remote service not found"); + return; + } + target = data_init(session, AVRCP_REMOTE_UUID); session->target = target; DBG("%p version 0x%04x", target, target->version); - service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID); btd_service_connecting_complete(service, 0); player = g_slist_nth_data(server->players, 0); @@ -4332,6 +4344,13 @@ static void controller_init(struct avrcp *session) if (session->controller != NULL) return; + service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID); + + if (service == NULL) { + error("avrcp target service not found"); + return; + } + controller = data_init(session, AVRCP_TARGET_UUID); session->controller = controller; @@ -4339,7 +4358,6 @@ static void controller_init(struct avrcp *session) if (controller->obex_port) DBG("%p OBEX PSM 0x%04x", controller, controller->obex_port); - service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID); btd_service_connecting_complete(service, 0); /* Only create player if category 1 is supported */ diff --git a/profiles/audio/bass.c b/profiles/audio/bass.c index b27a3fc12..f617efa2c 100644 --- a/profiles/audio/bass.c +++ b/profiles/audio/bass.c @@ -349,6 +349,11 @@ static void bap_state_changed(struct bt_bap_stream *stream, uint8_t old_state, struct bass_setup *setup = queue_find(dg->setups, match_setup_stream, stream); + if (setup == NULL) { + error("unable to find setup in delegator"); + return; + } + if (dg->bap != bap) return; -- 2.34.1