Skip to content

Commit 3c3119d

Browse files
Fixing size checks in Set/GetRotatingDeviceIdUniqueId and right sizing mRotatingDeviceIdUniqueId
1 parent 4965448 commit 3c3119d

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

examples/tv-casting-app/tv-casting-common/include/CHIPProjectAppConfig.h

+2
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,5 @@
5555
#define CONFIG_BUILD_FOR_HOST_UNIT_TEST 1
5656

5757
#define CHIP_ENABLE_ROTATING_DEVICE_ID 1
58+
59+
#define CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH 64

src/include/platform/internal/GenericConfigurationManagerImpl.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ class GenericConfigurationManagerImpl : public ConfigurationManager
118118
protected:
119119
#if CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID)
120120
chip::LifetimePersistedCounter<uint32_t> mLifetimePersistedCounter;
121-
uint8_t mRotatingDeviceIdUniqueId[kRotatingDeviceIDUniqueIDLength] = CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID;
121+
uint8_t mRotatingDeviceIdUniqueId[CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH] =
122+
CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID;
123+
size_t mRotatingDeviceIdUniqueIdLength = kRotatingDeviceIDUniqueIDLength;
122124
#endif
123125

124126
friend GenericDeviceInstanceInfoProvider<ConfigClass>;

src/include/platform/internal/GenericConfigurationManagerImpl.ipp

+7-6
Original file line numberDiff line numberDiff line change
@@ -541,18 +541,19 @@ CHIP_ERROR GenericConfigurationManagerImpl<ConfigClass>::IncrementLifetimeCounte
541541
template <class ConfigClass>
542542
CHIP_ERROR GenericConfigurationManagerImpl<ConfigClass>::SetRotatingDeviceIdUniqueId(const ByteSpan & uniqueIdSpan)
543543
{
544-
ReturnErrorCodeIf(uniqueIdSpan.size() != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL);
545-
memcpy(mRotatingDeviceIdUniqueId, uniqueIdSpan.data(), kRotatingDeviceIDUniqueIDLength);
544+
ReturnErrorCodeIf(uniqueIdSpan.size() < kMinRotatingDeviceIDUniqueIDLength, CHIP_ERROR_INVALID_ARGUMENT);
545+
ReturnErrorCodeIf(uniqueIdSpan.size() > CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH, CHIP_ERROR_BUFFER_TOO_SMALL);
546+
memcpy(mRotatingDeviceIdUniqueId, uniqueIdSpan.data(), uniqueIdSpan.size());
547+
mRotatingDeviceIdUniqueIdLength = uniqueIdSpan.size();
546548
return CHIP_NO_ERROR;
547549
}
548550

549551
template <class ConfigClass>
550552
CHIP_ERROR GenericConfigurationManagerImpl<ConfigClass>::GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan)
551553
{
552-
ReturnErrorCodeIf(sizeof(mRotatingDeviceIdUniqueId) > uniqueIdSpan.size(), CHIP_ERROR_BUFFER_TOO_SMALL);
553-
ReturnErrorCodeIf(uniqueIdSpan.size() != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL);
554-
memcpy(uniqueIdSpan.data(), mRotatingDeviceIdUniqueId, sizeof(mRotatingDeviceIdUniqueId));
555-
uniqueIdSpan.reduce_size(sizeof(mRotatingDeviceIdUniqueId));
554+
ReturnErrorCodeIf(mRotatingDeviceIdUniqueIdLength > uniqueIdSpan.size(), CHIP_ERROR_BUFFER_TOO_SMALL);
555+
memcpy(uniqueIdSpan.data(), mRotatingDeviceIdUniqueId, mRotatingDeviceIdUniqueIdLength);
556+
uniqueIdSpan.reduce_size(mRotatingDeviceIdUniqueIdLength);
556557
return CHIP_NO_ERROR;
557558
}
558559

0 commit comments

Comments
 (0)