Added range checking when getting/setting mixer weights

This commit is contained in:
Ross Owen
2023-02-08 12:04:38 +00:00
parent f80d7647e0
commit 58f691078d

View File

@@ -812,6 +812,8 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c
return result; return result;
} }
if(cn < sizeof(mixer1Weights)/sizeof(mixer1Weights[0]))
{
mixer1Weights[cn] = (buffer, unsigned char[])[0] | (buffer, unsigned char[])[1] << 8; mixer1Weights[cn] = (buffer, unsigned char[])[0] | (buffer, unsigned char[])[1] << 8;
if (mixer1Weights[cn] != 0x8000) if (mixer1Weights[cn] != 0x8000)
@@ -823,13 +825,20 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c
{ {
UpdateMixerWeight(c_mix_ctl, (cn) % 8, (cn) / 8, weightMult); UpdateMixerWeight(c_mix_ctl, (cn) % 8, (cn) / 8, weightMult);
} }
}
/* Send 0 Length as status stage */ /* Send 0 Length as status stage */
return XUD_DoSetRequestStatus(ep0_in); return XUD_DoSetRequestStatus(ep0_in);
} }
else else
{ {
short weight = mixer1Weights[cn]; short weight = 0x8000;
if(cn < sizeof(mixer1Weights)/sizeof(mixer1Weights[0]))
{
weight = mixer1Weights[cn];
}
(buffer, unsigned char[])[0] = weight & 0xff; (buffer, unsigned char[])[0] = weight & 0xff;
(buffer, unsigned char[])[1] = (weight >> 8) & 0xff; (buffer, unsigned char[])[1] = (weight >> 8) & 0xff;