--- a/src/helpers/AdvertDataHelpers.cpp
+++ b/src/helpers/AdvertDataHelpers.cpp
@@ -29,18 +29,24 @@
   AdvertDataParser::AdvertDataParser(const uint8_t app_data[], uint8_t app_data_len) {
     _name[0] = 0;
     _lat = _lon = 0;
     _flags = app_data[0];
     _valid = false;
     _extra1 = _extra2 = 0;
   
     int i = 1;
     if (_flags & ADV_LATLON_MASK) {
+      if (app_data_len < i + 8) return;  // need 8 bytes for lat + lon
       memcpy(&_lat, &app_data[i], 4); i += 4;
       memcpy(&_lon, &app_data[i], 4); i += 4;
     }
     if (_flags & ADV_FEAT1_MASK) {
+      if (app_data_len < i + 2) return;  // need 2 bytes for feat1
       memcpy(&_extra1, &app_data[i], 2); i += 2;
     }
     if (_flags & ADV_FEAT2_MASK) {
+      if (app_data_len < i + 2) return;  // need 2 bytes for feat2
       memcpy(&_extra2, &app_data[i], 2); i += 2;
     }
 
     if (app_data_len >= i) {
       int nlen = 0;
       if (_flags & ADV_NAME_MASK) {
