From 0c24d951ff07bccd982443733ecce0675e93833d Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 8 Dec 2022 13:39:33 +1300 Subject: [PATCH] Fix ble parsing with zero padded advertisements (#4162) --- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp index 853e998c80..fb377e2be2 100644 --- a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +++ b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp @@ -705,8 +705,13 @@ void ESPBTDevice::parse_adv_(const esp_ble_gap_cb_param_t::ble_scan_result_evt_p while (offset + 2 < len) { const uint8_t field_length = payload[offset++]; // First byte is length of adv record - if (field_length == 0) + if (field_length == 0) { + if (offset < param.adv_data_len && param.scan_rsp_len > 0) { // Zero padded advertisement data + offset = param.adv_data_len; + continue; + } break; + } // first byte of adv record is adv record type const uint8_t record_type = payload[offset++];