[BUG] Identify.TriggerEffect does not validate EffectIdentifier: Reserved values answer SUCCESS and reach the delegate as kUnknownEnumValue
Reproduction steps
Repro step using chip-tool:
- chip-tool identify trigger-effect 3 0 1 -> SUCCESS.
IdentifyCluster::InvokeCommand decodes TriggerEffect and acts on
EffectIdentifier without ever checking it against the enum.
Per Identify §1.2.7.2.1, the field "SHALL contain one of the non-reserved values in EffectIdentifierEnum", which defines only {0x00 Blink, 0x01 Breathe, 0x02 Okay, 0x0B ChannelChange, 0xFE FinishEffect, 0xFF StopEffect}. Interaction Model §8.9.4 says a command field that violates its constraints SHOULD be answered with CONSTRAINT_ERROR, so this is a SHOULD deviation, not a conformance failure, but the value also reaches application code in a state no application can act on.
IdentifyCluster.cpp:163-199:
mEffectIdentifier = data.effectIdentifier;
mEffectVariant = data.effectVariant;
// Other effects: cancel and trigger new effect.
auto err = SetIdentifyTime(IdentifyTimeChangeSource::kClient, 0);
mIdentifyDelegate->OnTriggerEffect(*this);
return err;DataModel::Decode folds any unrecognized value to kUnknownEnumValue (= 3 for this enum), so a reserved EffectIdentifier is neither kFinishEffect nor kStopEffect, falls to the "other effects" branch, invokes the delegate, and returns SUCCESS. The delegate then reads kUnknownEnumValue from GetEffectIdentifier().
Observed on all-clusters-app at 954268d via TC-IDM-9.1, on endpoints 1-4:
EP1 Identify.TriggerEffect.EffectIdentifier accepted violating payload
(value 3 is not defined by EffectIdentifierEnum)
EP1 Identify.TriggerEffect.EffectIdentifier accepted violating payload
(value 12 is not defined by EffectIdentifierEnum)Bug prevalence
Always
GitHub hash of the SDK that was being used
954268d
Platform
linux
Platform Version(s)
No response
Anything else?
Not a code-driven migration regression: the pre-migration ember identify-server.cpp also returned Status::Success unconditionally (src/app/clusters/identify-server/identify-server.cpp:257).
Source: project-chip/connectedhomeip