Prefer ReadUInt8 over ReadByte.
The former will throw when the end of the stream is reached, rather than requiring the caller to check for -1.
This commit is contained in:
@@ -53,33 +53,33 @@ namespace OpenRA
|
|||||||
using (var s = new MemoryStream(data))
|
using (var s = new MemoryStream(data))
|
||||||
{
|
{
|
||||||
// SEQUENCE
|
// SEQUENCE
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
ReadTLVLength(s);
|
ReadTLVLength(s);
|
||||||
|
|
||||||
// SEQUENCE -> fixed header junk
|
// SEQUENCE -> fixed header junk
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
var headerLength = ReadTLVLength(s);
|
var headerLength = ReadTLVLength(s);
|
||||||
s.Position += headerLength;
|
s.Position += headerLength;
|
||||||
|
|
||||||
// SEQUENCE -> BIT_STRING
|
// SEQUENCE -> BIT_STRING
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
ReadTLVLength(s);
|
ReadTLVLength(s);
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
|
|
||||||
// SEQUENCE -> BIT_STRING -> SEQUENCE
|
// SEQUENCE -> BIT_STRING -> SEQUENCE
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
ReadTLVLength(s);
|
ReadTLVLength(s);
|
||||||
|
|
||||||
// SEQUENCE -> BIT_STRING -> SEQUENCE -> INTEGER (modulus)
|
// SEQUENCE -> BIT_STRING -> SEQUENCE -> INTEGER (modulus)
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
var modulusLength = ReadTLVLength(s);
|
var modulusLength = ReadTLVLength(s);
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
var modulus = s.ReadBytes(modulusLength - 1);
|
var modulus = s.ReadBytes(modulusLength - 1);
|
||||||
|
|
||||||
// SEQUENCE -> BIT_STRING -> SEQUENCE -> INTEGER (exponent)
|
// SEQUENCE -> BIT_STRING -> SEQUENCE -> INTEGER (exponent)
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
var exponentLength = ReadTLVLength(s);
|
var exponentLength = ReadTLVLength(s);
|
||||||
s.ReadByte();
|
s.ReadUInt8();
|
||||||
var exponent = s.ReadBytes(exponentLength - 1);
|
var exponent = s.ReadBytes(exponentLength - 1);
|
||||||
|
|
||||||
return new RSAParameters
|
return new RSAParameters
|
||||||
@@ -158,7 +158,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
static int ReadTLVLength(Stream s)
|
static int ReadTLVLength(Stream s)
|
||||||
{
|
{
|
||||||
var length = s.ReadByte();
|
var length = s.ReadUInt8();
|
||||||
if (length < 0x80)
|
if (length < 0x80)
|
||||||
return length;
|
return length;
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ namespace OpenRA.Mods.Cnc.AudioLoaders
|
|||||||
var block = default(VocBlock);
|
var block = default(VocBlock);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
block.Code = stream.ReadByte();
|
block.Code = stream.ReadUInt8();
|
||||||
block.Length = 0;
|
block.Length = 0;
|
||||||
}
|
}
|
||||||
catch (EndOfStreamException)
|
catch (EndOfStreamException)
|
||||||
@@ -162,9 +162,9 @@ namespace OpenRA.Mods.Cnc.AudioLoaders
|
|||||||
if (block.Code == 0 || block.Code > 9)
|
if (block.Code == 0 || block.Code > 9)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
block.Length = stream.ReadByte();
|
block.Length = stream.ReadUInt8();
|
||||||
block.Length |= stream.ReadByte() << 8;
|
block.Length |= stream.ReadUInt8() << 8;
|
||||||
block.Length |= stream.ReadByte() << 16;
|
block.Length |= stream.ReadUInt8() << 16;
|
||||||
|
|
||||||
var skip = 0;
|
var skip = 0;
|
||||||
switch (block.Code)
|
switch (block.Code)
|
||||||
@@ -174,9 +174,9 @@ namespace OpenRA.Mods.Cnc.AudioLoaders
|
|||||||
{
|
{
|
||||||
if (block.Length < 2)
|
if (block.Length < 2)
|
||||||
throw new InvalidDataException("Invalid sound data block length in voc file");
|
throw new InvalidDataException("Invalid sound data block length in voc file");
|
||||||
var freqDiv = stream.ReadByte();
|
var freqDiv = stream.ReadUInt8();
|
||||||
block.SampleBlock.Rate = GetSampleRateFromVocRate(freqDiv);
|
block.SampleBlock.Rate = GetSampleRateFromVocRate(freqDiv);
|
||||||
var codec = stream.ReadByte();
|
var codec = stream.ReadUInt8();
|
||||||
if (codec != 0)
|
if (codec != 0)
|
||||||
throw new InvalidDataException("Unhandled codec used in voc file");
|
throw new InvalidDataException("Unhandled codec used in voc file");
|
||||||
skip = block.Length - 2;
|
skip = block.Length - 2;
|
||||||
@@ -205,7 +205,7 @@ namespace OpenRA.Mods.Cnc.AudioLoaders
|
|||||||
throw new InvalidDataException("Invalid silence block length in voc file");
|
throw new InvalidDataException("Invalid silence block length in voc file");
|
||||||
block.SampleBlock.Offset = 0;
|
block.SampleBlock.Offset = 0;
|
||||||
block.SampleBlock.Samples = stream.ReadUInt16() + 1;
|
block.SampleBlock.Samples = stream.ReadUInt16() + 1;
|
||||||
var freqDiv = stream.ReadByte();
|
var freqDiv = stream.ReadUInt8();
|
||||||
block.SampleBlock.Rate = GetSampleRateFromVocRate(freqDiv);
|
block.SampleBlock.Rate = GetSampleRateFromVocRate(freqDiv);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -231,10 +231,10 @@ namespace OpenRA.Mods.Cnc.AudioLoaders
|
|||||||
int freqDiv = stream.ReadUInt16();
|
int freqDiv = stream.ReadUInt16();
|
||||||
if (freqDiv == 65536)
|
if (freqDiv == 65536)
|
||||||
throw new InvalidDataException("Invalid frequency divisor 65536 in voc file");
|
throw new InvalidDataException("Invalid frequency divisor 65536 in voc file");
|
||||||
var codec = stream.ReadByte();
|
var codec = stream.ReadUInt8();
|
||||||
if (codec != 0)
|
if (codec != 0)
|
||||||
throw new InvalidDataException("Unhandled codec used in voc file");
|
throw new InvalidDataException("Unhandled codec used in voc file");
|
||||||
var channels = stream.ReadByte() + 1;
|
var channels = stream.ReadUInt8() + 1;
|
||||||
if (channels != 1)
|
if (channels != 1)
|
||||||
throw new InvalidDataException("Unhandled number of channels in voc file");
|
throw new InvalidDataException("Unhandled number of channels in voc file");
|
||||||
block.SampleBlock.Offset = 0;
|
block.SampleBlock.Offset = 0;
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ using OpenRA.Primitives;
|
|||||||
namespace OpenRA.Mods.Cnc.FileFormats
|
namespace OpenRA.Mods.Cnc.FileFormats
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum SoundFlags
|
enum SoundFlags : byte
|
||||||
{
|
{
|
||||||
Stereo = 0x1,
|
Stereo = 0x1,
|
||||||
_16Bit = 0x2,
|
_16Bit = 0x2,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum SoundFormat
|
enum SoundFormat : byte
|
||||||
{
|
{
|
||||||
WestwoodCompressed = 1,
|
WestwoodCompressed = 1,
|
||||||
ImaAdpcm = 99,
|
ImaAdpcm = 99,
|
||||||
@@ -59,12 +59,12 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
sampleRate = s.ReadUInt16();
|
sampleRate = s.ReadUInt16();
|
||||||
var dataSize = s.ReadInt32();
|
var dataSize = s.ReadInt32();
|
||||||
var outputSize = s.ReadInt32();
|
var outputSize = s.ReadInt32();
|
||||||
var audioFlags = (SoundFlags)s.ReadByte();
|
var audioFlags = (SoundFlags)s.ReadUInt8();
|
||||||
sampleBits = (audioFlags & SoundFlags._16Bit) == 0 ? 8 : 16;
|
sampleBits = (audioFlags & SoundFlags._16Bit) == 0 ? 8 : 16;
|
||||||
channels = (audioFlags & SoundFlags.Stereo) == 0 ? 1 : 2;
|
channels = (audioFlags & SoundFlags.Stereo) == 0 ? 1 : 2;
|
||||||
lengthInSeconds = (float)(outputSize * 8) / (channels * sampleBits * sampleRate);
|
lengthInSeconds = (float)(outputSize * 8) / (channels * sampleBits * sampleRate);
|
||||||
|
|
||||||
var readFormat = s.ReadByte();
|
var readFormat = s.ReadUInt8();
|
||||||
if (!Enum.IsDefined(typeof(SoundFormat), readFormat))
|
if (!Enum.IsDefined(typeof(SoundFormat), readFormat))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
@@ -93,8 +93,8 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
SampleRate = stream.ReadUInt16();
|
SampleRate = stream.ReadUInt16();
|
||||||
AudioChannels = stream.ReadByte();
|
AudioChannels = stream.ReadUInt8();
|
||||||
SampleBits = stream.ReadByte();
|
SampleBits = stream.ReadUInt8();
|
||||||
|
|
||||||
/*var unknown3 =*/stream.ReadUInt32();
|
/*var unknown3 =*/stream.ReadUInt32();
|
||||||
/*var unknown4 =*/stream.ReadUInt16();
|
/*var unknown4 =*/stream.ReadUInt16();
|
||||||
@@ -221,7 +221,7 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Chunks are aligned on even bytes; advance by a byte if the next one is null
|
// Chunks are aligned on even bytes; advance by a byte if the next one is null
|
||||||
if (stream.Peek() == 0) stream.ReadByte();
|
if (stream.Peek() == 0) stream.ReadUInt8();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,7 +300,7 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
DecodeVQFR(stream);
|
DecodeVQFR(stream);
|
||||||
break;
|
break;
|
||||||
case "\0VQF":
|
case "\0VQF":
|
||||||
stream.ReadByte();
|
stream.ReadUInt8();
|
||||||
DecodeVQFR(stream);
|
DecodeVQFR(stream);
|
||||||
break;
|
break;
|
||||||
case "VQFL":
|
case "VQFL":
|
||||||
@@ -313,7 +313,7 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Chunks are aligned on even bytes; advance by a byte if the next one is null
|
// Chunks are aligned on even bytes; advance by a byte if the next one is null
|
||||||
if (stream.Peek() == 0) stream.ReadByte();
|
if (stream.Peek() == 0) stream.ReadUInt8();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now that the frame data has been loaded (in the relevant private fields), decode it into CurrentFrameData.
|
// Now that the frame data has been loaded (in the relevant private fields), decode it into CurrentFrameData.
|
||||||
@@ -340,7 +340,7 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
// Chunks are aligned on even bytes; may be padded with a single null
|
// Chunks are aligned on even bytes; may be padded with a single null
|
||||||
if (s.Peek() == 0) s.ReadByte();
|
if (s.Peek() == 0) s.ReadUInt8();
|
||||||
var type = s.ReadASCII(4);
|
var type = s.ReadASCII(4);
|
||||||
var subchunkLength = (int)int2.Swap(s.ReadUInt32());
|
var subchunkLength = (int)int2.Swap(s.ReadUInt32());
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using System.IO;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc.FileFormats
|
namespace OpenRA.Mods.Cnc.FileFormats
|
||||||
{
|
{
|
||||||
public enum NormalType { TiberianSun = 2, RedAlert2 = 4 }
|
public enum NormalType : byte { TiberianSun = 2, RedAlert2 = 4 }
|
||||||
public readonly struct VxlElement
|
public readonly struct VxlElement
|
||||||
{
|
{
|
||||||
public readonly byte Color;
|
public readonly byte Color;
|
||||||
@@ -148,7 +148,7 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
for (var j = 0; j < 6; j++)
|
for (var j = 0; j < 6; j++)
|
||||||
Limbs[i].Bounds[j] = s.ReadFloat();
|
Limbs[i].Bounds[j] = s.ReadFloat();
|
||||||
Limbs[i].Size = s.ReadBytes(3);
|
Limbs[i].Size = s.ReadBytes(3);
|
||||||
Limbs[i].Type = (NormalType)s.ReadByte();
|
Limbs[i].Type = (NormalType)s.ReadUInt8();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < LimbCount; i++)
|
for (var i = 0; i < LimbCount; i++)
|
||||||
|
|||||||
@@ -63,9 +63,9 @@ namespace OpenRA.Mods.Cnc.FileFormats
|
|||||||
paletteBytes = new byte[1024];
|
paletteBytes = new byte[1024];
|
||||||
for (var i = 0; i < paletteBytes.Length;)
|
for (var i = 0; i < paletteBytes.Length;)
|
||||||
{
|
{
|
||||||
var r = (byte)(stream.ReadByte() << 2);
|
var r = (byte)(stream.ReadUInt8() << 2);
|
||||||
var g = (byte)(stream.ReadByte() << 2);
|
var g = (byte)(stream.ReadUInt8() << 2);
|
||||||
var b = (byte)(stream.ReadByte() << 2);
|
var b = (byte)(stream.ReadUInt8() << 2);
|
||||||
|
|
||||||
// Replicate high bits into the (currently zero) low bits.
|
// Replicate high bits into the (currently zero) low bits.
|
||||||
r |= (byte)(r >> 6);
|
r |= (byte)(r >> 6);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Cnc.SpriteLoaders
|
|||||||
public class ShpD2Loader : ISpriteLoader
|
public class ShpD2Loader : ISpriteLoader
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum FormatFlags : int
|
enum FormatFlags : ushort
|
||||||
{
|
{
|
||||||
PaletteTable = 1,
|
PaletteTable = 1,
|
||||||
NotLCWCompressed = 2,
|
NotLCWCompressed = 2,
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ namespace OpenRA.Mods.Cnc.SpriteLoaders
|
|||||||
|
|
||||||
public class ShpTDSprite
|
public class ShpTDSprite
|
||||||
{
|
{
|
||||||
enum Format { XORPrev = 0x20, XORLCW = 0x40, LCW = 0x80 }
|
enum Format : ushort { XORPrev = 0x20, XORLCW = 0x40, LCW = 0x80 }
|
||||||
|
|
||||||
sealed class ImageHeader : ISpriteFrame
|
sealed class ImageHeader : ISpriteFrame
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace OpenRA.Mods.Common.FileFormats
|
|||||||
{
|
{
|
||||||
public static class WavReader
|
public static class WavReader
|
||||||
{
|
{
|
||||||
enum WaveType { Pcm = 0x1, MsAdpcm = 0x2, ImaAdpcm = 0x11 }
|
enum WaveType : short { Pcm = 0x1, MsAdpcm = 0x2, ImaAdpcm = 0x11 }
|
||||||
|
|
||||||
public static bool LoadSound(Stream s, out Func<Stream> result, out short channels, out int sampleBits, out int sampleRate, out float lengthInSeconds)
|
public static bool LoadSound(Stream s, out Func<Stream> result, out short channels, out int sampleBits, out int sampleRate, out float lengthInSeconds)
|
||||||
{
|
{
|
||||||
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.FileFormats
|
|||||||
while (s.Position < s.Length)
|
while (s.Position < s.Length)
|
||||||
{
|
{
|
||||||
if ((s.Position & 1) == 1)
|
if ((s.Position & 1) == 1)
|
||||||
s.ReadByte(); // Alignment
|
s.ReadUInt8(); // Alignment
|
||||||
|
|
||||||
if (s.Position == s.Length)
|
if (s.Position == s.Length)
|
||||||
break; // Break if we aligned with end of stream
|
break; // Break if we aligned with end of stream
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ namespace OpenRA.Mods.Common.FileSystem
|
|||||||
s.Position += 12;
|
s.Position += 12;
|
||||||
var chunkSize = s.ReadUInt16();
|
var chunkSize = s.ReadUInt16();
|
||||||
s.Position += 4;
|
s.Position += 4;
|
||||||
var nameLength = s.ReadByte();
|
var nameLength = s.ReadUInt8();
|
||||||
var fileName = dirName + "\\" + s.ReadASCII(nameLength);
|
var fileName = dirName + "\\" + s.ReadASCII(nameLength);
|
||||||
|
|
||||||
// Use index syntax to overwrite any duplicate entries with the last value
|
// Use index syntax to overwrite any duplicate entries with the last value
|
||||||
|
|||||||
Reference in New Issue
Block a user