Skip to content

Commit 90bc34d

Browse files
committed
Validate selected and masked channels against channel count limit when copying parameter values
1 parent ef83d54 commit 90bc34d

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

Source/Processors/Parameter/ParameterCollection.cpp

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,44 @@ void ParameterCollection::copyParameterValuesTo (ParameterOwner* pOwner)
8787
for (auto parameter : parameters)
8888
{
8989
if (pOwner->hasParameter (parameter->getName()))
90-
pOwner->getParameter (parameter->getName())->currentValue = parameter->getValue();
90+
{
91+
Parameter* targetParam = pOwner->getParameter (parameter->getName());
92+
93+
// For MaskChannelsParameter and SelectedChannelsParameter, filter the values
94+
// to only include valid channel indices for the target parameter's channel count
95+
if (parameter->getType() == Parameter::MASK_CHANNELS_PARAM)
96+
{
97+
MaskChannelsParameter* targetMaskParam = (MaskChannelsParameter*) targetParam;
98+
int targetChannelCount = targetMaskParam->getChannelCount();
99+
100+
Array<var> filteredValues;
101+
for (int i = 0; i < parameter->getValue().getArray()->size(); i++)
102+
{
103+
int channelIndex = (int) parameter->getValue()[i];
104+
if (channelIndex >= 0 && channelIndex < targetChannelCount)
105+
filteredValues.add (channelIndex);
106+
}
107+
targetParam->currentValue = filteredValues;
108+
}
109+
else if (parameter->getType() == Parameter::SELECTED_CHANNELS_PARAM)
110+
{
111+
SelectedChannelsParameter* targetSelectedParam = (SelectedChannelsParameter*) targetParam;
112+
int targetChannelCount = targetSelectedParam->getChannelCount();
113+
114+
Array<var> filteredValues;
115+
for (int i = 0; i < parameter->getValue().getArray()->size(); i++)
116+
{
117+
int channelIndex = (int) parameter->getValue()[i];
118+
if (channelIndex >= 0 && channelIndex < targetChannelCount)
119+
filteredValues.add (channelIndex);
120+
}
121+
targetParam->currentValue = filteredValues;
122+
}
123+
else
124+
{
125+
targetParam->currentValue = parameter->getValue();
126+
}
127+
}
91128
}
92129
}
93130

0 commit comments

Comments
 (0)