From 0afaaa41b58fe3e32b79ea001c30c6374e1b7cfe Mon Sep 17 00:00:00 2001 From: Jakub Pawlowski Date: Thu, 1 Sep 2016 03:29:51 -0700 Subject: [PATCH] Fix HID crashing on reconnect This patch fixes crashes on reconnection to HID device. All those issues are already fixed in AOSP. Bug: 31221398 Change-Id: I43b64d0b11b1f548cb373332777ea92d8a075466 --- bta/hh/bta_hh_le.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/bta/hh/bta_hh_le.c b/bta/hh/bta_hh_le.c index 92b3c40bf..0196e904d 100644 --- a/bta/hh/bta_hh_le.c +++ b/bta/hh/bta_hh_le.c @@ -1774,6 +1774,11 @@ void bta_hh_w4_le_read_char_cmpl(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_DATA *p_buf) const tBTA_GATTC_CHARACTERISTIC *p_char = BTA_GATTC_GetCharacteristic(p_dev_cb->conn_id, p_data->handle); + if (p_char == NULL) { + APPL_TRACE_ERROR("%s: p_char is NULL %d", __func__, p_data->handle); + return; + } + UINT16 char_uuid = p_char->uuid.uu.uuid16; if (char_uuid == GATT_UUID_BATTERY_LEVEL) @@ -1783,6 +1788,12 @@ void bta_hh_w4_le_read_char_cmpl(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_DATA *p_buf) else if (char_uuid == GATT_UUID_GAP_PREF_CONN_PARAM) { //TODO(jpawlowski): this should be done by GAP profile, remove when GAP is fixed. + if (p_data->status != BTA_GATT_OK || p_data->p_value == NULL) { + APPL_TRACE_ERROR("%s: read pref conn params error: %d", + __func__, p_data->status); + return; + } + UINT8 *pp = p_data->p_value->p_value; UINT16 min, max, latency, tout; STREAM_TO_UINT16 (min, pp); @@ -1858,6 +1869,11 @@ void bta_hh_le_read_char_cmpl (tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_DATA *p_buf) const tBTA_GATTC_CHARACTERISTIC *p_char = BTA_GATTC_GetCharacteristic(p_dev_cb->conn_id, p_data->handle); + if (p_char == NULL) { + APPL_TRACE_ERROR("%s: p_char is NULL %d", __func__, p_data->handle); + return; + } + UINT16 char_uuid = p_char->uuid.uu.uuid16; switch (char_uuid) @@ -1898,6 +1914,10 @@ void bta_hh_le_read_descr_cmpl(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_DATA *p_buf) UINT8 *pp; const tBTA_GATTC_DESCRIPTOR *p_desc = BTA_GATTC_GetDescriptor(p_data->conn_id, p_data->handle); + if (p_desc == NULL) { + APPL_TRACE_ERROR("%s: p_descr is NULL %d", __func__, p_data->handle); + return; + } /* if a report client configuration */ if (p_desc->uuid.uu.uuid16 == GATT_UUID_CHAR_CLIENT_CONFIG) @@ -1934,7 +1954,6 @@ void bta_hh_w4_le_read_descr_cmpl(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_DATA *p_buf) return; const tBTA_GATTC_DESCRIPTOR *p_desc = BTA_GATTC_GetDescriptor(p_data->conn_id, p_data->handle); - if (p_desc == NULL) { APPL_TRACE_ERROR("%s: p_descr is NULL %d", __func__, p_data->handle); return; -- 2.11.0