Skip to content

Commit 61754ac

Browse files
Reorder member varible for memory holes, validated buffer size before storing to userActiveModeTriggerInstruction
1 parent fa128b2 commit 61754ac

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

src/app/clusters/icd-management-server/CodegenIntegration.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class IntegrationDelegate : public CodegenClusterIntegration::Delegate
6262
Protocols::InteractionModel::Status::Success)
6363
{
6464
ChipLogError(Zcl, "Failed to get UserActiveModeTriggerHint, using default (0)");
65-
userActiveModeTriggerHint = BitMask<IcdManagement::UserActiveModeTriggerBitmap>(0);
65+
userActiveModeTriggerHint.ClearAll();
6666
}
6767

6868
// Get UserActiveModeTriggerInstruction

src/app/clusters/icd-management-server/ICDManagementCluster.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,15 @@ ICDManagementCluster::ICDManagementCluster(EndpointId endpointId, Crypto::Symmet
9696
CharSpan userActiveModeTriggerInstruction) :
9797
DefaultServerCluster({ endpointId, IcdManagement::Id }),
9898
mSymmetricKeystore(symmetricKeystore), mFabricTable(fabricTable), mICDConfigurationData(icdConfigurationData),
99-
mOptionalAttributeSet(optionalAttributeSet), mEnabledCommands(enabledCommands),
100-
mUserActiveModeTriggerBitmap(userActiveModeTriggerBitmap),
101-
mUserActiveModeTriggerInstructionLength(static_cast<uint8_t>(
102-
std::min(userActiveModeTriggerInstruction.size(), IcdManagement::kUserActiveModeTriggerInstructionMaxLength)))
99+
mOptionalAttributeSet(optionalAttributeSet), mUserActiveModeTriggerBitmap(userActiveModeTriggerBitmap),
100+
mEnabledCommands(enabledCommands), mUserActiveModeTriggerInstructionLength(0)
103101
{
102+
static_assert(sizeof(mUserActiveModeTriggerInstruction) <= UINT8_MAX,
103+
"mUserActiveModeTriggerInstruction size must fit in uint8_t");
104+
104105
MutableCharSpan buffer(mUserActiveModeTriggerInstruction);
105106
CopyCharSpanToMutableCharSpanWithTruncation(userActiveModeTriggerInstruction, buffer);
107+
mUserActiveModeTriggerInstructionLength = static_cast<uint8_t>(buffer.size());
106108
}
107109

108110
DataModel::ActionReturnStatus ICDManagementCluster::ReadAttribute(const DataModel::ReadAttributeRequest & request,

src/app/clusters/icd-management-server/ICDManagementCluster.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,10 @@ class ICDManagementCluster : public DefaultServerCluster
104104
FabricTable & mFabricTable;
105105
ICDConfigurationData & mICDConfigurationData;
106106
const OptionalAttributeSet mOptionalAttributeSet;
107-
const BitMask<IcdManagement::OptionalCommands> mEnabledCommands;
108107
const BitMask<IcdManagement::UserActiveModeTriggerBitmap> mUserActiveModeTriggerBitmap;
108+
const BitMask<IcdManagement::OptionalCommands> mEnabledCommands;
109+
uint8_t mUserActiveModeTriggerInstructionLength;
109110
char mUserActiveModeTriggerInstruction[IcdManagement::kUserActiveModeTriggerInstructionMaxLength];
110-
const uint8_t mUserActiveModeTriggerInstructionLength;
111111
};
112112

113113
#if CHIP_CONFIG_ENABLE_ICD_CIP

0 commit comments

Comments
 (0)