diff --git a/connections/implementation/mediums/ble_v2/ble_advertisement_header.cc b/connections/implementation/mediums/ble_v2/ble_advertisement_header.cc index 30b440c8..1587f991 100644 --- a/connections/implementation/mediums/ble_v2/ble_advertisement_header.cc +++ b/connections/implementation/mediums/ble_v2/ble_advertisement_header.cc @@ -34,7 +34,7 @@ BleAdvertisementHeader::BleAdvertisementHeader( Version version, bool extended_advertisement, int num_slots, const ByteArray &service_id_bloom_filter, const ByteArray &advertisement_hash, int psm) { - if (version != Version::kV2 || num_slots <= 0 || + if (version != Version::kV2 || num_slots < 0 || service_id_bloom_filter.size() != kServiceIdBloomFilterLength || advertisement_hash.size() != kAdvertisementHashLength) { return; @@ -86,7 +86,7 @@ BleAdvertisementHeader::BleAdvertisementHeader( ((version_and_num_slots_byte & kExtendedAdvertismentBitMask) >> 4) == 1; // The lower 4 bits are supposed to be the number of slots. num_slots_ = static_cast(version_and_num_slots_byte & kNumSlotsBitmask); - if (num_slots_ <= 0) { + if (num_slots_ < 0) { version_ = Version::kUndefined; return; } diff --git a/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc b/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc index cb300ba7..82f7200e 100644 --- a/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc +++ b/connections/implementation/mediums/ble_v2/ble_advertisement_header_test.cc @@ -63,12 +63,25 @@ TEST(BleAdvertisementHeaderTest, ConstructionFailsWithBadVersion) { EXPECT_FALSE(ble_advertisement_header.IsValid()); } -TEST(BleAdvertisementHeaderTest, ConstructionFailsWitZeroNumSlot) { +TEST(BleAdvertisementHeaderTest, ConstructionSucceedsWithZeroNumSlot) { int num_slot = 0; ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)}; ByteArray advertisement_hash{std::string(kAdvertisementHash)}; + BleAdvertisementHeader ble_advertisement_header{ + kVersion, false, num_slot, service_id_bloom_filter, + advertisement_hash, kPsmValue}; + + EXPECT_TRUE(ble_advertisement_header.IsValid()); +} + +TEST(BleAdvertisementHeaderTest, ConstructionFailsWithNegativeNumSlot) { + int num_slot = -1; + + ByteArray service_id_bloom_filter{std::string(kServiceIDBloomFilter)}; + ByteArray advertisement_hash{std::string(kAdvertisementHash)}; + BleAdvertisementHeader ble_advertisement_header{ kVersion, false, num_slot, service_id_bloom_filter, advertisement_hash, kPsmValue};