diff --git a/src/libraries/System.Windows.Extensions/src/System/Media/SoundPlayer.cs b/src/libraries/System.Windows.Extensions/src/System/Media/SoundPlayer.cs index e57dff3e55ce2..3b3f21c1a1b5e 100644 --- a/src/libraries/System.Windows.Extensions/src/System/Media/SoundPlayer.cs +++ b/src/libraries/System.Windows.Extensions/src/System/Media/SoundPlayer.cs @@ -630,32 +630,22 @@ private unsafe void ValidateSoundFile(string fileName) private static void ValidateSoundData(byte[] data) { - int position; - short wFormatTag = -1; - bool fmtChunkFound = false; - - // the RIFF header should be at least 12 bytes long. - if (data.Length < 12) - { - throw new InvalidOperationException(SR.SoundAPIInvalidWaveHeader); - } - // validate the RIFF header - if (data[0] != 'R' || data[1] != 'I' || data[2] != 'F' || data[3] != 'F') - { - throw new InvalidOperationException(SR.SoundAPIInvalidWaveHeader); - } - if (data[8] != 'W' || data[9] != 'A' || data[10] != 'V' || data[11] != 'E') + if (data.Length < 12 || + !data.AsSpan().StartsWith("RIFF"u8) || + !data.AsSpan(8).StartsWith("WAVE"u8)) { throw new InvalidOperationException(SR.SoundAPIInvalidWaveHeader); } // we only care about "fmt " chunk - position = 12; + int position = 12; int len = data.Length; + short wFormatTag = -1; + bool fmtChunkFound = false; while (!fmtChunkFound && position < len - 8) { - if (data[position] == (byte)'f' && data[position + 1] == (byte)'m' && data[position + 2] == (byte)'t' && data[position + 3] == (byte)' ') + if (data.AsSpan(position).StartsWith("fmt "u8)) { // fmt chunk fmtChunkFound = true;