diff --git a/system/main/shim/utils.cc b/system/main/shim/utils.cc
index dcf1725beb1f4e4f249f8aa576d2c5fa3e500744..9f18ddc4f76ee49b2c50f9fd5e5b1f7c828cebea 100644
--- a/system/main/shim/utils.cc
+++ b/system/main/shim/utils.cc
@@ -25,6 +25,10 @@ void parse_gap_data(const std::vector<uint8_t> &raw_data,
       hci::GapData gap_data;
       uint8_t len = raw_data[offset];
 
+      if (offset + len + 1 > raw_data.size()) {
+        break;
+      }
+
       auto begin = raw_data.begin() + offset;
       auto end = begin + len + 1;  // 1 byte for len
       auto data_copy = std::make_shared<std::vector<uint8_t>>(begin, end);