forked from Mirror/Ryujinx
[Hotfix] hid: Prevent out of bounds array access (#5547)
* hid: Prevent out of bounds array access * Cast player to uint * Replace lambda function with local function
This commit is contained in:
parent
5e9678c8fa
commit
fe15c77d30
2 changed files with 22 additions and 16 deletions
|
@ -70,6 +70,11 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
|||
|
||||
internal void SetSupportedPlayer(PlayerIndex player, bool supported = true)
|
||||
{
|
||||
if ((uint)player >= _supportedPlayers.Length)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_supportedPlayers[(int)player] = supported;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,22 @@ namespace Ryujinx.Tests.Cpu
|
|||
bool methodCalled = false;
|
||||
bool isFz = false;
|
||||
|
||||
var managedMethod = () =>
|
||||
var method = TranslatorTestMethods.GenerateFpFlagsPInvokeTest();
|
||||
|
||||
// This method sets flush-to-zero and then calls the managed method.
|
||||
// Before and after setting the flags, it ensures subnormal addition works as expected.
|
||||
// It returns a positive result if any tests fail, and 0 on success (or if the platform cannot change FP flags)
|
||||
int result = method(Marshal.GetFunctionPointerForDelegate(ManagedMethod));
|
||||
|
||||
// Subnormal results are not flushed to zero by default, which we should have returned to exiting the method.
|
||||
Assert.AreNotEqual(GetDenormal() + GetZero(), 0f);
|
||||
|
||||
Assert.True(result == 0);
|
||||
Assert.True(methodCalled);
|
||||
Assert.True(isFz);
|
||||
return;
|
||||
|
||||
void ManagedMethod()
|
||||
{
|
||||
// Floating point math should not modify fp flags.
|
||||
float test = 2f * 3.5f;
|
||||
|
@ -73,21 +88,7 @@ namespace Ryujinx.Tests.Cpu
|
|||
|
||||
methodCalled = true;
|
||||
}
|
||||
};
|
||||
|
||||
var method = TranslatorTestMethods.GenerateFpFlagsPInvokeTest();
|
||||
|
||||
// This method sets flush-to-zero and then calls the managed method.
|
||||
// Before and after setting the flags, it ensures subnormal addition works as expected.
|
||||
// It returns a positive result if any tests fail, and 0 on success (or if the platform cannot change FP flags)
|
||||
int result = method(Marshal.GetFunctionPointerForDelegate(managedMethod));
|
||||
|
||||
// Subnormal results are not flushed to zero by default, which we should have returned to exiting the method.
|
||||
Assert.AreNotEqual(GetDenormal() + GetZero(), 0f);
|
||||
|
||||
Assert.True(result == 0);
|
||||
Assert.True(methodCalled);
|
||||
Assert.True(isFz);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue