fix(bt/bluedroid): fixed access NULL in HFP callback handler

This commit is contained in:
Jin Cheng
2024-12-03 17:53:40 +08:00
parent 2cab55ba0f
commit 185b4d9d44

View File

@ -316,12 +316,17 @@ bt_status_t btc_hf_init(void)
{ {
int idx = 0; int idx = 0;
if (hf_local_param[idx].btc_hf_cb.initialized) { #if HFP_DYNAMIC_MEMORY == TRUE
esp_hf_cb_param_t param = { if (hf_local_param)
.prof_stat.state = ESP_HF_INIT_ALREADY, #endif
}; {
btc_hf_cb_to_app(ESP_HF_PROF_STATE_EVT, &param); if (hf_local_param[idx].btc_hf_cb.initialized) {
return BT_STATUS_SUCCESS; esp_hf_cb_param_t param = {
.prof_stat.state = ESP_HF_INIT_ALREADY,
};
btc_hf_cb_to_app(ESP_HF_PROF_STATE_EVT, &param);
return BT_STATUS_SUCCESS;
}
} }
BTC_TRACE_DEBUG("%s - max_hf_clients=%d", __func__, btc_max_hf_clients); BTC_TRACE_DEBUG("%s - max_hf_clients=%d", __func__, btc_max_hf_clients);
@ -364,12 +369,18 @@ void btc_hf_deinit(void)
BTC_TRACE_EVENT("%s", __FUNCTION__); BTC_TRACE_EVENT("%s", __FUNCTION__);
int idx = 0; int idx = 0;
if (!hf_local_param[idx].btc_hf_cb.initialized) {
esp_hf_cb_param_t param = { #if HFP_DYNAMIC_MEMORY == TRUE
.prof_stat.state = ESP_HF_DEINIT_ALREADY, if (hf_local_param)
}; #endif
btc_hf_cb_to_app(ESP_HF_PROF_STATE_EVT, &param); {
return; if (!hf_local_param[idx].btc_hf_cb.initialized) {
esp_hf_cb_param_t param = {
.prof_stat.state = ESP_HF_DEINIT_ALREADY,
};
btc_hf_cb_to_app(ESP_HF_PROF_STATE_EVT, &param);
return;
}
} }
btc_dm_disable_service(BTA_HFP_SERVICE_ID); btc_dm_disable_service(BTA_HFP_SERVICE_ID);
@ -1285,12 +1296,17 @@ void btc_hf_cb_handler(btc_msg_t *msg)
case BTA_AG_DISABLE_EVT: case BTA_AG_DISABLE_EVT:
{ {
idx = 0; idx = 0;
btc_hf_cb_release(); #if HFP_DYNAMIC_MEMORY == TRUE
if (hf_local_param[idx].btc_hf_cb.initialized) { if (hf_local_param)
param.prof_stat.state = ESP_HF_DEINIT_SUCCESS; #endif
btc_hf_cb_to_app(ESP_HF_PROF_STATE_EVT, &param); {
if (hf_local_param[idx].btc_hf_cb.initialized) {
hf_local_param[idx].btc_hf_cb.initialized = false;
btc_hf_cb_release();
param.prof_stat.state = ESP_HF_DEINIT_SUCCESS;
btc_hf_cb_to_app(ESP_HF_PROF_STATE_EVT, &param);
}
} }
hf_local_param[idx].btc_hf_cb.initialized = false;
break; break;
} }
case BTA_AG_REGISTER_EVT: case BTA_AG_REGISTER_EVT: