hle: Improve safety (#2778)
* timezone: Make timezone implementation safe * hle: Do not use TrimEnd to parse ASCII strings This adds an util that handle reading an ASCII string in a safe way. Previously it was possible to read malformed data that could cause various undefined behaviours in multiple services. * hid: Remove an useless unsafe modifier on keyboard update * Address gdkchan's comment * Address gdkchan's comment
This commit is contained in:
parent
b4dc33efc2
commit
51fa1b2cb0
9 changed files with 141 additions and 172 deletions
|
@ -36,6 +36,15 @@ namespace Ryujinx.HLE.Utilities
|
|||
return output;
|
||||
}
|
||||
|
||||
public static string ReadInlinedAsciiString(BinaryReader reader, int maxSize)
|
||||
{
|
||||
byte[] data = reader.ReadBytes(maxSize);
|
||||
|
||||
int stringSize = Array.IndexOf<byte>(data, 0);
|
||||
|
||||
return Encoding.ASCII.GetString(data, 0, stringSize < 0 ? maxSize : stringSize);
|
||||
}
|
||||
|
||||
public static byte[] HexToBytes(string hexString)
|
||||
{
|
||||
// Ignore last character if HexLength % 2 != 0.
|
||||
|
@ -107,7 +116,7 @@ namespace Ryujinx.HLE.Utilities
|
|||
}
|
||||
}
|
||||
|
||||
public static unsafe int CompareCStr(char* s1, char* s2)
|
||||
public static int CompareCStr(ReadOnlySpan<char> s1, ReadOnlySpan<char> s2)
|
||||
{
|
||||
int s1Index = 0;
|
||||
int s2Index = 0;
|
||||
|
@ -121,7 +130,7 @@ namespace Ryujinx.HLE.Utilities
|
|||
return s2[s2Index] - s1[s1Index];
|
||||
}
|
||||
|
||||
public static unsafe int LengthCstr(char* s)
|
||||
public static int LengthCstr(ReadOnlySpan<char> s)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue