From 0702409047f372c5ec7b7566ec8a86500caa8972 Mon Sep 17 00:00:00 2001 From: edwinwu Date: Mon, 14 Mar 2022 19:38:59 -0700 Subject: [PATCH] [BLE Refactor] Modify to allow zero numSlots for AdvertisementHeader. PiperOrigin-RevId: 434634152 --- .../mediums/ble_v2/ble_advertisement_header.cc | 4 ++-- .../ble_v2/ble_advertisement_header_test.cc | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) 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};