From 90875097a18a5804dce04515f4ec5274c4e167a2 Mon Sep 17 00:00:00 2001 From: Marc Lepage Date: Thu, 3 Mar 2022 10:47:12 -0500 Subject: [PATCH] Use tmp struct and node id when converting subject Break out the steps so it's clearer what is happening. Verified that writing group subjects 4444, 5555, and 6666 properly got converted to node IDs 0xFFFFFFFFFFFF115C, 0xFFFFFFFFFFFF15B3, and 0xFFFFFFFFFFFF1A0A, and reading them properly converted them back. --- .../access-control-server.cpp | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/app/clusters/access-control-server/access-control-server.cpp b/src/app/clusters/access-control-server/access-control-server.cpp index 8a387a605424a9..e97f93f5234ffc 100644 --- a/src/app/clusters/access-control-server/access-control-server.cpp +++ b/src/app/clusters/access-control-server/access-control-server.cpp @@ -250,10 +250,11 @@ struct AccessControlEntryCodec { for (size_t i = 0; i < subjectCount; ++i) { - Subject subject; - ReturnErrorOnFailure(entry.GetSubject(i, subject.nodeId)); - ReturnErrorOnFailure(Convert(subject.nodeId, subject)); - subjectBuffer[i] = subject.nodeId; + NodeId subject; + ReturnErrorOnFailure(entry.GetSubject(i, subject)); + Subject tmp; + ReturnErrorOnFailure(AccessControlEntryCodec::Convert(subject, tmp)); + subjectBuffer[i] = tmp.nodeId; } staging.subjects.SetNonNull(subjectBuffer, subjectCount); } @@ -302,9 +303,10 @@ struct AccessControlEntryCodec auto iterator = staging.subjects.Value().begin(); while (iterator.Next()) { - Subject subject = { .nodeId = iterator.GetValue(), .authMode = staging.authMode }; - ReturnErrorOnFailure(Convert(subject, subject.nodeId)); - ReturnErrorOnFailure(entry.AddSubject(nullptr, subject.nodeId)); + Subject tmp = { .nodeId = iterator.GetValue(), .authMode = staging.authMode }; + NodeId subject; + ReturnErrorOnFailure(Convert(tmp, subject)); + ReturnErrorOnFailure(entry.AddSubject(nullptr, subject)); } ReturnErrorOnFailure(iterator.GetStatus()); } @@ -393,10 +395,11 @@ CHIP_ERROR LogEntryChangedEvent(const AccessControl::Entry & entry, const Access { for (size_t i = 0; i < subjectCount; ++i) { - Subject subject; - ReturnErrorOnFailure(entry.GetSubject(i, subject.nodeId)); - ReturnErrorOnFailure(AccessControlEntryCodec::Convert(subject.nodeId, subject)); - subjectBuffer[i] = subject.nodeId; + NodeId subject; + ReturnErrorOnFailure(entry.GetSubject(i, subject)); + Subject tmp; + ReturnErrorOnFailure(AccessControlEntryCodec::Convert(subject, tmp)); + subjectBuffer[i] = tmp.nodeId; } staging.subjects.SetNonNull(subjectBuffer, subjectCount); }