diff options
Diffstat (limited to 'src/bluetooth-adapter.c')
-rw-r--r-- | src/bluetooth-adapter.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/bluetooth-adapter.c b/src/bluetooth-adapter.c index ce9fc4e..0f71324 100644 --- a/src/bluetooth-adapter.c +++ b/src/bluetooth-adapter.c @@ -3308,7 +3308,7 @@ int bt_adapter_le_get_scan_result_ibeacon_report(const bt_adapter_le_device_scan bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_ibeacon_scan_result_info_s **ibeacon_info) { int manufacturer_id; - char *manufacturer_data; + char *manufacturer_data = NULL; int manufacturer_data_len; BT_CHECK_LE_SUPPORT(); @@ -3320,11 +3320,18 @@ int bt_adapter_le_get_scan_result_ibeacon_report(const bt_adapter_le_device_scan &manufacturer_data_len) != BT_ERROR_NONE) return BT_ERROR_NO_DATA; - if (manufacturer_data == NULL || manufacturer_data_len < 23) + if (manufacturer_data == NULL) return BT_ERROR_NO_DATA; - if (manufacturer_id != COMPANY_ID_APPLE) + if (manufacturer_data_len < 23) { + bt_adapter_free_manufacturer_data(manufacturer_data); return BT_ERROR_NO_DATA; + } + + if (manufacturer_id != COMPANY_ID_APPLE) { + bt_adapter_free_manufacturer_data(manufacturer_data); + return BT_ERROR_NO_DATA; + } *ibeacon_info = g_malloc0(sizeof(bt_adapter_le_ibeacon_scan_result_info_s)); @@ -3347,6 +3354,8 @@ int bt_adapter_le_get_scan_result_ibeacon_report(const bt_adapter_le_device_scan (*ibeacon_info)->measured_power = manufacturer_data[22]; + bt_adapter_free_manufacturer_data(manufacturer_data); + return BT_ERROR_NONE; /* LCOV_EXCL_STOP */ } |