diff --git a/SabreTools.Serialization.Test/Deserializers/AACSTests.cs b/SabreTools.Serialization.Test/Deserializers/AACSTests.cs new file mode 100644 index 00000000..6d27c0d6 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/AACSTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class AACSTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.AACS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.AACS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.AACS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.AACS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.AACS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.AACS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/ArchiveDotOrgTests.cs b/SabreTools.Serialization.Test/Deserializers/ArchiveDotOrgTests.cs new file mode 100644 index 00000000..519f298c --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/ArchiveDotOrgTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class ArchiveDotOrgTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.ArchiveDotOrg(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.ArchiveDotOrg(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.ArchiveDotOrg(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.ArchiveDotOrg(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.ArchiveDotOrg(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.ArchiveDotOrg(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/AttractModeTests.cs b/SabreTools.Serialization.Test/Deserializers/AttractModeTests.cs new file mode 100644 index 00000000..b9509c76 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/AttractModeTests.cs @@ -0,0 +1,88 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class AttractModeTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.AttractMode(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.AttractMode(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.AttractMode(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into a single, malformatted header line + Assert.NotNull(actual); + Assert.NotNull(actual.Header); + var col = Assert.Single(actual.Header); + Assert.Equal(1024, col.Length); + Assert.NotNull(actual.Row); + Assert.Empty(actual.Row); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.AttractMode(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.AttractMode(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + var data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.AttractMode(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into a single, malformatted header line + Assert.NotNull(actual); + Assert.NotNull(actual.Header); + var col = Assert.Single(actual.Header); + Assert.Equal(1024, col.Length); + Assert.NotNull(actual.Row); + Assert.Empty(actual.Row); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/BDPlusTests.cs b/SabreTools.Serialization.Test/Deserializers/BDPlusTests.cs new file mode 100644 index 00000000..a9e9dd21 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/BDPlusTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class BDPlusTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.BDPlus(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.BDPlus(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.BDPlus(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.BDPlus(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.BDPlus(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.BDPlus(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/BFPKTests.cs b/SabreTools.Serialization.Test/Deserializers/BFPKTests.cs new file mode 100644 index 00000000..e8cf558c --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/BFPKTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class BFPKTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.BFPK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.BFPK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.BFPK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.BFPK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.BFPK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.BFPK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/BSPTests.cs b/SabreTools.Serialization.Test/Deserializers/BSPTests.cs new file mode 100644 index 00000000..b6f7d513 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/BSPTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class BSPTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.BSP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.BSP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.BSP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.BSP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.BSP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.BSP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/CFBTests.cs b/SabreTools.Serialization.Test/Deserializers/CFBTests.cs new file mode 100644 index 00000000..a49e6b0e --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/CFBTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class CFBTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.CFB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.CFB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.CFB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.CFB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.CFB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.CFB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/CHDTests.cs b/SabreTools.Serialization.Test/Deserializers/CHDTests.cs new file mode 100644 index 00000000..cb093716 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/CHDTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class CHDTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.CHD(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.CHD(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.CHD(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.CHD(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.CHD(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.CHD(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/CIATests.cs b/SabreTools.Serialization.Test/Deserializers/CIATests.cs new file mode 100644 index 00000000..d05cec6b --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/CIATests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class CIATests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.CIA(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.CIA(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.CIA(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.CIA(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.CIA(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.CIA(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/CatalogTests.cs b/SabreTools.Serialization.Test/Deserializers/CatalogTests.cs new file mode 100644 index 00000000..17eac9fe --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/CatalogTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class CatalogTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.Catalog(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.Catalog(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.Catalog(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.Catalog(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.Catalog(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.Catalog(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/ClrMameProTests.cs b/SabreTools.Serialization.Test/Deserializers/ClrMameProTests.cs new file mode 100644 index 00000000..9dae0553 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/ClrMameProTests.cs @@ -0,0 +1,84 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class ClrMameProTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.ClrMamePro(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.ClrMamePro(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.ClrMamePro(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Equal(default, actual.ClrMamePro); + Assert.NotNull(actual.Game); + Assert.Empty(actual.Game); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.ClrMamePro(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.ClrMamePro(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.ClrMamePro(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Equal(default, actual.ClrMamePro); + Assert.NotNull(actual.Game); + Assert.Empty(actual.Game); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/CueSheetTests.cs b/SabreTools.Serialization.Test/Deserializers/CueSheetTests.cs new file mode 100644 index 00000000..25560f49 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/CueSheetTests.cs @@ -0,0 +1,90 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class CueSheetTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.CueSheet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.CueSheet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.CueSheet(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Null(actual.Catalog); + Assert.Null(actual.CdTextFile); + Assert.Null(actual.Performer); + Assert.Null(actual.Songwriter); + Assert.Null(actual.Title); + Assert.Null(actual.Files); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.CueSheet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.CueSheet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.CueSheet(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Null(actual.Catalog); + Assert.Null(actual.CdTextFile); + Assert.Null(actual.Performer); + Assert.Null(actual.Songwriter); + Assert.Null(actual.Title); + Assert.Null(actual.Files); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/DosCenterTests.cs b/SabreTools.Serialization.Test/Deserializers/DosCenterTests.cs new file mode 100644 index 00000000..f47d34a9 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/DosCenterTests.cs @@ -0,0 +1,84 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class DosCenterTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.DosCenter(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.DosCenter(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.DosCenter(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Equal(default, actual.DosCenter); + Assert.NotNull(actual.Game); + Assert.Empty(actual.Game); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.DosCenter(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.DosCenter(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.DosCenter(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Equal(default, actual.DosCenter); + Assert.NotNull(actual.Game); + Assert.Empty(actual.Game); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/EverdriveSMDBTests.cs b/SabreTools.Serialization.Test/Deserializers/EverdriveSMDBTests.cs new file mode 100644 index 00000000..231d9217 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/EverdriveSMDBTests.cs @@ -0,0 +1,82 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class EverdriveSMDBTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.EverdriveSMDB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.EverdriveSMDB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.EverdriveSMDB(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.NotNull(actual.Row); + Assert.Empty(actual.Row); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.EverdriveSMDB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.EverdriveSMDB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.EverdriveSMDB(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.NotNull(actual.Row); + Assert.Empty(actual.Row); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/GCFTests.cs b/SabreTools.Serialization.Test/Deserializers/GCFTests.cs new file mode 100644 index 00000000..a3e51ad8 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/GCFTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class GCFTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.GCF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.GCF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.GCF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.GCF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.GCF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.GCF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/HashfileTests.cs b/SabreTools.Serialization.Test/Deserializers/HashfileTests.cs new file mode 100644 index 00000000..a57c935e --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/HashfileTests.cs @@ -0,0 +1,96 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class HashfileTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.Hashfile(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.Hashfile(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.Hashfile(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Null(actual.SFV); + Assert.Null(actual.MD2); + Assert.Null(actual.MD4); + Assert.Null(actual.MD5); + Assert.Null(actual.SHA1); + Assert.Null(actual.SHA256); + Assert.Null(actual.SHA384); + Assert.Null(actual.SHA512); + Assert.Null(actual.SpamSum); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.Hashfile(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.Hashfile(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.Hashfile(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Null(actual.SFV); + Assert.Null(actual.MD2); + Assert.Null(actual.MD4); + Assert.Null(actual.MD5); + Assert.Null(actual.SHA1); + Assert.Null(actual.SHA256); + Assert.Null(actual.SHA384); + Assert.Null(actual.SHA512); + Assert.Null(actual.SpamSum); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/IRDTests.cs b/SabreTools.Serialization.Test/Deserializers/IRDTests.cs new file mode 100644 index 00000000..d4cb80eb --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/IRDTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class IRDTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.IRD(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.IRD(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.IRD(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.IRD(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.IRD(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.IRD(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/InstallShieldArchiveV3Tests.cs b/SabreTools.Serialization.Test/Deserializers/InstallShieldArchiveV3Tests.cs new file mode 100644 index 00000000..540c6e25 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/InstallShieldArchiveV3Tests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class InstallShieldArchiveV3Tests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.InstallShieldArchiveV3(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.InstallShieldArchiveV3(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.InstallShieldArchiveV3(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.InstallShieldArchiveV3(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.InstallShieldArchiveV3(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.InstallShieldArchiveV3(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/InstallShieldCabinetTests.cs b/SabreTools.Serialization.Test/Deserializers/InstallShieldCabinetTests.cs new file mode 100644 index 00000000..240451e3 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/InstallShieldCabinetTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class InstallShieldCabinetTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.InstallShieldCabinet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.InstallShieldCabinet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.InstallShieldCabinet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.InstallShieldCabinet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.InstallShieldCabinet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.InstallShieldCabinet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/LinearExecutableTests.cs b/SabreTools.Serialization.Test/Deserializers/LinearExecutableTests.cs new file mode 100644 index 00000000..a089e87c --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/LinearExecutableTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class LinearExecutableTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.LinearExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.LinearExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.LinearExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.LinearExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.LinearExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.LinearExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/ListromTests.cs b/SabreTools.Serialization.Test/Deserializers/ListromTests.cs new file mode 100644 index 00000000..26a1eeda --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/ListromTests.cs @@ -0,0 +1,82 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class ListromTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.Listrom(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.Listrom(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.Listrom(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.NotNull(actual.Set); + Assert.Empty(actual.Set); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.Listrom(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.Listrom(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.Listrom(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.NotNull(actual.Set); + Assert.Empty(actual.Set); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/ListxmlTests.cs b/SabreTools.Serialization.Test/Deserializers/ListxmlTests.cs new file mode 100644 index 00000000..b2ce38cb --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/ListxmlTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class ListxmlTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.Listxml(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.Listxml(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.Listxml(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.Listxml(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.Listxml(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.Listxml(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/LogiqxTests.cs b/SabreTools.Serialization.Test/Deserializers/LogiqxTests.cs new file mode 100644 index 00000000..2d11b31d --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/LogiqxTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class LogiqxTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.Logiqx(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.Logiqx(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.Logiqx(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.Logiqx(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.Logiqx(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.Logiqx(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/M1Tests.cs b/SabreTools.Serialization.Test/Deserializers/M1Tests.cs new file mode 100644 index 00000000..a3edcd27 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/M1Tests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class M1Tests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.M1(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.M1(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.M1(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.M1(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.M1(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.M1(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/MSDOSTests.cs b/SabreTools.Serialization.Test/Deserializers/MSDOSTests.cs new file mode 100644 index 00000000..9d737e6d --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/MSDOSTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class MSDOSTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.MSDOS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.MSDOS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.MSDOS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.MSDOS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.MSDOS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.MSDOS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/MicrosoftCabinetTests.cs b/SabreTools.Serialization.Test/Deserializers/MicrosoftCabinetTests.cs new file mode 100644 index 00000000..c164da95 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/MicrosoftCabinetTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class MicrosoftCabinetTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.MicrosoftCabinet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.MicrosoftCabinet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.MicrosoftCabinet(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.MicrosoftCabinet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.MicrosoftCabinet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.MicrosoftCabinet(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/MoPaQTests.cs b/SabreTools.Serialization.Test/Deserializers/MoPaQTests.cs new file mode 100644 index 00000000..d2b20e36 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/MoPaQTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class MoPaQTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.MoPaQ(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.MoPaQ(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.MoPaQ(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.MoPaQ(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.MoPaQ(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.MoPaQ(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/N3DSTests.cs b/SabreTools.Serialization.Test/Deserializers/N3DSTests.cs new file mode 100644 index 00000000..52e9f63e --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/N3DSTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class N3DSTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.N3DS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.N3DS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.N3DS(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.N3DS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.N3DS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.N3DS(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/NCFTests.cs b/SabreTools.Serialization.Test/Deserializers/NCFTests.cs new file mode 100644 index 00000000..ffcbbe50 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/NCFTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class NCFTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.NCF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.NCF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.NCF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.NCF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.NCF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.NCF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/NewExecutableTests.cs b/SabreTools.Serialization.Test/Deserializers/NewExecutableTests.cs new file mode 100644 index 00000000..06f4487a --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/NewExecutableTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class NewExecutableTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.NewExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.NewExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.NewExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.NewExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.NewExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.NewExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/NitroTests.cs b/SabreTools.Serialization.Test/Deserializers/NitroTests.cs new file mode 100644 index 00000000..212a7e8b --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/NitroTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class NitroTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.Nitro(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.Nitro(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.Nitro(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.Nitro(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.Nitro(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.Nitro(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/OfflineListTests.cs b/SabreTools.Serialization.Test/Deserializers/OfflineListTests.cs new file mode 100644 index 00000000..4d92298f --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/OfflineListTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class OfflineListTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.OfflineList(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.OfflineList(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.OfflineList(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.OfflineList(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.OfflineList(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.OfflineList(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/OpenMSXTests.cs b/SabreTools.Serialization.Test/Deserializers/OpenMSXTests.cs new file mode 100644 index 00000000..954ec9bb --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/OpenMSXTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class OpenMSXTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.OpenMSX(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.OpenMSX(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.OpenMSX(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.OpenMSX(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.OpenMSX(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.OpenMSX(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/PAKTests.cs b/SabreTools.Serialization.Test/Deserializers/PAKTests.cs new file mode 100644 index 00000000..654b0f14 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/PAKTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class PAKTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.PAK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.PAK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.PAK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.PAK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.PAK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.PAK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/PFFTests.cs b/SabreTools.Serialization.Test/Deserializers/PFFTests.cs new file mode 100644 index 00000000..95b760e3 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/PFFTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class PFFTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.PFF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.PFF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.PFF(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.PFF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.PFF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.PFF(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/PICTests.cs b/SabreTools.Serialization.Test/Deserializers/PICTests.cs new file mode 100644 index 00000000..d50ba789 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/PICTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class PICTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.PIC(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.PIC(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.PIC(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.PIC(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.PIC(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.PIC(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/PKZIPTests.cs b/SabreTools.Serialization.Test/Deserializers/PKZIPTests.cs new file mode 100644 index 00000000..8fec26ae --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/PKZIPTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class PKZIPTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.PKZIP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.PKZIP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.PKZIP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.PKZIP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.PKZIP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.PKZIP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/PlayJAudioTests.cs b/SabreTools.Serialization.Test/Deserializers/PlayJAudioTests.cs new file mode 100644 index 00000000..709ec9de --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/PlayJAudioTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class PlayJAudioTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.PlayJAudio(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.PlayJAudio(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.PlayJAudio(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.PlayJAudio(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.PlayJAudio(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.PlayJAudio(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/PlayJPlaylistTests.cs b/SabreTools.Serialization.Test/Deserializers/PlayJPlaylistTests.cs new file mode 100644 index 00000000..f67bccd7 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/PlayJPlaylistTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class PlayJPlaylistTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.PlayJPlaylist(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.PlayJPlaylist(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.PlayJPlaylist(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.PlayJPlaylist(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.PlayJPlaylist(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.PlayJPlaylist(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/PortableExecutableTests.cs b/SabreTools.Serialization.Test/Deserializers/PortableExecutableTests.cs new file mode 100644 index 00000000..58f12d1d --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/PortableExecutableTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class PortableExecutableTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.PortableExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.PortableExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.PortableExecutable(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.PortableExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.PortableExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.PortableExecutable(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/QuantumTests.cs b/SabreTools.Serialization.Test/Deserializers/QuantumTests.cs new file mode 100644 index 00000000..db0b5de9 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/QuantumTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class QuantumTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.Quantum(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.Quantum(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.Quantum(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.Quantum(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.Quantum(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.Quantum(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/RomCenterTests.cs b/SabreTools.Serialization.Test/Deserializers/RomCenterTests.cs new file mode 100644 index 00000000..e8ebeafc --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/RomCenterTests.cs @@ -0,0 +1,86 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class RomCenterTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.RomCenter(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.RomCenter(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.RomCenter(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Null(actual.Credits); + Assert.Null(actual.Dat); + Assert.Null(actual.Emulator); + Assert.Null(actual.Games); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.RomCenter(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.RomCenter(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.RomCenter(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into an empty model + Assert.NotNull(actual); + Assert.Null(actual.Credits); + Assert.Null(actual.Dat); + Assert.Null(actual.Emulator); + Assert.Null(actual.Games); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/SFBTests.cs b/SabreTools.Serialization.Test/Deserializers/SFBTests.cs new file mode 100644 index 00000000..80cb1689 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/SFBTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class SFBTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.SFB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.SFB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.SFB(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.SFB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.SFB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.SFB(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/SFOTests.cs b/SabreTools.Serialization.Test/Deserializers/SFOTests.cs new file mode 100644 index 00000000..925fa3ba --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/SFOTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class SFOTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.SFO(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.SFO(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.SFO(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.SFO(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.SFO(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.SFO(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/SGATests.cs b/SabreTools.Serialization.Test/Deserializers/SGATests.cs new file mode 100644 index 00000000..5cc46534 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/SGATests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class SGATests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.SGA(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.SGA(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.SGA(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.SGA(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.SGA(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.SGA(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/SeparatedValueTests.cs b/SabreTools.Serialization.Test/Deserializers/SeparatedValueTests.cs new file mode 100644 index 00000000..0abfb8da --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/SeparatedValueTests.cs @@ -0,0 +1,88 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class SeparatedValueTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.SeparatedValue(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.SeparatedValue(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.SeparatedValue(); + + var actual = deserializer.Deserialize(data, offset); + + // TODO: Unexpected result + // Turns into a single, malformatted header line + Assert.NotNull(actual); + Assert.NotNull(actual.Header); + var col = Assert.Single(actual.Header); + Assert.Equal(1024, col.Length); + Assert.NotNull(actual.Row); + Assert.Empty(actual.Row); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.SeparatedValue(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.SeparatedValue(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.SeparatedValue(); + + var actual = deserializer.Deserialize(data); + + // TODO: Unexpected result + // Turns into a single, malformatted header line + Assert.NotNull(actual); + Assert.NotNull(actual.Header); + var col = Assert.Single(actual.Header); + Assert.Equal(1024, col.Length); + Assert.NotNull(actual.Row); + Assert.Empty(actual.Row); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/SoftwareListTests.cs b/SabreTools.Serialization.Test/Deserializers/SoftwareListTests.cs new file mode 100644 index 00000000..a66507d8 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/SoftwareListTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class SoftwareListTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.SoftwareList(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.SoftwareList(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.SoftwareList(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.SoftwareList(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.SoftwareList(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.SoftwareList(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/VBSPTests.cs b/SabreTools.Serialization.Test/Deserializers/VBSPTests.cs new file mode 100644 index 00000000..0c134429 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/VBSPTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class VBSPTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.VBSP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.VBSP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.VBSP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.VBSP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.VBSP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.VBSP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/VPKTests.cs b/SabreTools.Serialization.Test/Deserializers/VPKTests.cs new file mode 100644 index 00000000..4c2dfdb0 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/VPKTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class VPKTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.VPK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.VPK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.VPK(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.VPK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.VPK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.VPK(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/WAD3Tests.cs b/SabreTools.Serialization.Test/Deserializers/WAD3Tests.cs new file mode 100644 index 00000000..5c52c8c0 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/WAD3Tests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class WAD3Tests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.WAD3(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.WAD3(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.WAD3(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.WAD3(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.WAD3(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.WAD3(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/XMIDTests.cs b/SabreTools.Serialization.Test/Deserializers/XMIDTests.cs new file mode 100644 index 00000000..afa942e2 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/XMIDTests.cs @@ -0,0 +1,37 @@ +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class XMIDTests + { + [Fact] + public void NullString_Null() + { + string? data = null; + var deserializer = new Serialization.Deserializers.XMID(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyString_Null() + { + string? data = string.Empty; + var deserializer = new Serialization.Deserializers.XMID(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidString_Null() + { + string? data = "INVALID"; + var deserializer = new Serialization.Deserializers.XMID(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/XZPTests.cs b/SabreTools.Serialization.Test/Deserializers/XZPTests.cs new file mode 100644 index 00000000..278e5ded --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/XZPTests.cs @@ -0,0 +1,72 @@ +using System.IO; +using System.Linq; +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class XZPTests + { + [Fact] + public void NullArray_Null() + { + byte[]? data = null; + int offset = 0; + var deserializer = new Serialization.Deserializers.XZP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void EmptyArray_Null() + { + byte[]? data = []; + int offset = 0; + var deserializer = new Serialization.Deserializers.XZP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void InvalidArray_Null() + { + byte[]? data = [.. Enumerable.Repeat(0xFF, 1024)]; + int offset = 0; + var deserializer = new Serialization.Deserializers.XZP(); + + var actual = deserializer.Deserialize(data, offset); + Assert.Null(actual); + } + + [Fact] + public void NullStream_Null() + { + Stream? data = null; + var deserializer = new Serialization.Deserializers.XZP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyStream_Null() + { + Stream? data = new MemoryStream([]); + var deserializer = new Serialization.Deserializers.XZP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidStream_Null() + { + Stream? data = new MemoryStream([.. Enumerable.Repeat(0xFF, 1024)]); + var deserializer = new Serialization.Deserializers.XZP(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/Deserializers/XeMIDTests.cs b/SabreTools.Serialization.Test/Deserializers/XeMIDTests.cs new file mode 100644 index 00000000..b4683590 --- /dev/null +++ b/SabreTools.Serialization.Test/Deserializers/XeMIDTests.cs @@ -0,0 +1,37 @@ +using Xunit; + +namespace SabreTools.Serialization.Test.Deserializers +{ + public class XeMIDTests + { + [Fact] + public void NullString_Null() + { + string? data = null; + var deserializer = new Serialization.Deserializers.XeMID(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void EmptyString_Null() + { + string? data = string.Empty; + var deserializer = new Serialization.Deserializers.XeMID(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + + [Fact] + public void InvalidString_Null() + { + string? data = "INVALID"; + var deserializer = new Serialization.Deserializers.XeMID(); + + var actual = deserializer.Deserialize(data); + Assert.Null(actual); + } + } +} \ No newline at end of file diff --git a/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj b/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj index 11f50911..9dd6d40b 100644 --- a/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj +++ b/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj @@ -28,6 +28,7 @@ + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/SabreTools.Serialization/Deserializers/AACS.cs b/SabreTools.Serialization/Deserializers/AACS.cs index b441e3bc..278e50a4 100644 --- a/SabreTools.Serialization/Deserializers/AACS.cs +++ b/SabreTools.Serialization/Deserializers/AACS.cs @@ -85,7 +85,7 @@ namespace SabreTools.Serialization.Deserializers RecordType.DriveRevocationList => ParseDriveRevocationListRecord(data, type, length), RecordType.HostRevocationList => ParseHostRevocationListRecord(data, type, length), RecordType.VerifyMediaKey => ParseVerifyMediaKeyRecord(data, type, length), - RecordType.Copyright => ParseCopyrightRecord(data, type, length), + //RecordType.Copyright => ParseCopyrightRecord(data, type, length), // TODO: REENABLE WHEN MODELS UPDATED // Unknown record type _ => null, diff --git a/SabreTools.Serialization/Deserializers/AttractMode.cs b/SabreTools.Serialization/Deserializers/AttractMode.cs index 9ed417af..ec86b32b 100644 --- a/SabreTools.Serialization/Deserializers/AttractMode.cs +++ b/SabreTools.Serialization/Deserializers/AttractMode.cs @@ -25,6 +25,17 @@ namespace SabreTools.Serialization.Deserializers if (data == null) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the reader and output var reader = new SeparatedValueReader(data, Encoding.UTF8) { diff --git a/SabreTools.Serialization/Deserializers/CIA.cs b/SabreTools.Serialization/Deserializers/CIA.cs index 25174c5b..6e4ce90e 100644 --- a/SabreTools.Serialization/Deserializers/CIA.cs +++ b/SabreTools.Serialization/Deserializers/CIA.cs @@ -144,7 +144,22 @@ namespace SabreTools.Serialization.Deserializers /// Filled CIA header on success, null on error public static CIAHeader? ParseCIAHeader(Stream data) { - return data.ReadType(); + var header = data.ReadType(); + + if (header == null) + return null; + if (header.CertificateChainSize > data.Length) + return null; + if (header.TicketSize > data.Length) + return null; + if (header.TMDFileSize > data.Length) + return null; + if (header.MetaSize > data.Length) + return null; + if ((long)header.ContentSize > data.Length) + return null; + + return header; } /// diff --git a/SabreTools.Serialization/Deserializers/ClrMamePro.cs b/SabreTools.Serialization/Deserializers/ClrMamePro.cs index 0f13d11d..d31f9a50 100644 --- a/SabreTools.Serialization/Deserializers/ClrMamePro.cs +++ b/SabreTools.Serialization/Deserializers/ClrMamePro.cs @@ -26,7 +26,7 @@ namespace SabreTools.Serialization.Deserializers public MetadataFile? Deserialize(byte[]? data, int offset, bool quotes) { // If the data is invalid - if (data == null) + if (data == null || data.Length == 0) return default; // If the offset is out of bounds @@ -82,6 +82,17 @@ namespace SabreTools.Serialization.Deserializers if (data == null) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the reader and output var reader = new ClrMameProReader(data, Encoding.UTF8) { Quotes = quotes }; var dat = new MetadataFile(); diff --git a/SabreTools.Serialization/Deserializers/CueSheet.cs b/SabreTools.Serialization/Deserializers/CueSheet.cs index 8ad0b4dc..64f6f7bc 100644 --- a/SabreTools.Serialization/Deserializers/CueSheet.cs +++ b/SabreTools.Serialization/Deserializers/CueSheet.cs @@ -113,7 +113,9 @@ namespace SabreTools.Serialization.Deserializers } } - cueSheet.Files = [.. cueFiles]; + if (cueFiles.Count > 0) + cueSheet.Files = [.. cueFiles]; + return cueSheet; } @@ -195,7 +197,9 @@ namespace SabreTools.Serialization.Deserializers } } - cueFile.Tracks = [.. cueTracks]; + if (cueTracks.Count > 0) + cueFile.Tracks = [.. cueTracks]; + return cueFile; } @@ -346,7 +350,9 @@ namespace SabreTools.Serialization.Deserializers } } - cueTrack.Indices = [.. cueIndices]; + if (cueIndices.Count > 0) + cueTrack.Indices = [.. cueIndices]; + return cueTrack; } diff --git a/SabreTools.Serialization/Deserializers/DosCenter.cs b/SabreTools.Serialization/Deserializers/DosCenter.cs index ad99398c..58a3633d 100644 --- a/SabreTools.Serialization/Deserializers/DosCenter.cs +++ b/SabreTools.Serialization/Deserializers/DosCenter.cs @@ -15,6 +15,17 @@ namespace SabreTools.Serialization.Deserializers if (data == null) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the reader and output var reader = new ClrMameProReader(data, Encoding.UTF8) { DosCenter = true }; var dat = new MetadataFile(); diff --git a/SabreTools.Serialization/Deserializers/EverdriveSMDB.cs b/SabreTools.Serialization/Deserializers/EverdriveSMDB.cs index 8b927eff..317d7d11 100644 --- a/SabreTools.Serialization/Deserializers/EverdriveSMDB.cs +++ b/SabreTools.Serialization/Deserializers/EverdriveSMDB.cs @@ -11,9 +11,13 @@ namespace SabreTools.Serialization.Deserializers /// public override MetadataFile? Deserialize(Stream? data) { - // If the stream is null - if (data == null) - return default; + // If the data is invalid + if (data == null || data.Length == 0 || !data.CanSeek || !data.CanRead) + return null; + + // If the offset is out of bounds + if (data.Position < 0 || data.Position >= data.Length) + return null; // Setup the reader and output var reader = new SeparatedValueReader(data, Encoding.UTF8) @@ -32,6 +36,10 @@ namespace SabreTools.Serialization.Deserializers if (!reader.ReadNextLine() || reader.Line == null) break; + // If the next line has an invalid count + if (reader.Line.Count < 5) + break; + // Parse the line into a row var row = new Row { diff --git a/SabreTools.Serialization/Deserializers/Hashfile.cs b/SabreTools.Serialization/Deserializers/Hashfile.cs index 8dffd4ca..b7e66219 100644 --- a/SabreTools.Serialization/Deserializers/Hashfile.cs +++ b/SabreTools.Serialization/Deserializers/Hashfile.cs @@ -26,7 +26,7 @@ namespace SabreTools.Serialization.Deserializers public Models.Hashfile.Hashfile? Deserialize(byte[]? data, int offset, HashType hash) { // If the data is invalid - if (data == null) + if (data == null || data.Length == 0) return null; // If the offset is out of bounds @@ -82,6 +82,17 @@ namespace SabreTools.Serialization.Deserializers if (data == null) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the reader and output var reader = new StreamReader(data); var dat = new Models.Hashfile.Hashfile(); @@ -103,7 +114,7 @@ namespace SabreTools.Serialization.Deserializers // Read and split the line string? line = reader.ReadLine(); string[]? lineParts = line?.Split([' '], StringSplitOptions.RemoveEmptyEntries); - if (lineParts == null) + if (lineParts == null || lineParts.Length < 2) continue; // Parse the line into a hash @@ -188,31 +199,40 @@ namespace SabreTools.Serialization.Deserializers switch (hash) { case HashType.CRC32: - dat.SFV = [.. sfvList]; + if (sfvList.Count > 0) + dat.SFV = [.. sfvList]; break; case HashType.MD2: - dat.MD2 = [.. md2List]; + if (md2List.Count > 0) + dat.MD2 = [.. md2List]; break; case HashType.MD4: - dat.MD4 = [.. md4List]; + if (md4List.Count > 0) + dat.MD4 = [.. md4List]; break; case HashType.MD5: - dat.MD5 = [.. md5List]; + if (md5List.Count > 0) + dat.MD5 = [.. md5List]; break; case HashType.SHA1: - dat.SHA1 = [.. sha1List]; + if (sha1List.Count > 0) + dat.SHA1 = [.. sha1List]; break; case HashType.SHA256: - dat.SHA256 = [.. sha256List]; + if (sha256List.Count > 0) + dat.SHA256 = [.. sha256List]; break; case HashType.SHA384: - dat.SHA384 = [.. sha384List]; + if (sha384List.Count > 0) + dat.SHA384 = [.. sha384List]; break; case HashType.SHA512: - dat.SHA512 = [.. sha512List]; + if (sha512List.Count > 0) + dat.SHA512 = [.. sha512List]; break; case HashType.SpamSum: - dat.SpamSum = [.. spamsumList]; + if (spamsumList.Count > 0) + dat.SpamSum = [.. spamsumList]; break; } diff --git a/SabreTools.Serialization/Deserializers/JsonFile.cs b/SabreTools.Serialization/Deserializers/JsonFile.cs index c88efd96..056fe0d0 100644 --- a/SabreTools.Serialization/Deserializers/JsonFile.cs +++ b/SabreTools.Serialization/Deserializers/JsonFile.cs @@ -8,7 +8,7 @@ namespace SabreTools.Serialization.Deserializers /// Base class for other JSON serializers /// /// - public class JsonFile : BaseBinaryDeserializer + public abstract class JsonFile : BaseBinaryDeserializer { #region IByteDeserializer @@ -77,17 +77,36 @@ namespace SabreTools.Serialization.Deserializers /// Filled object on success, null on error public T? Deserialize(Stream? data, Encoding encoding) { - // If the stream is null - if (data == null) + // If the stream is invalid + if (data == null || !data.CanRead) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the serializer and the reader var serializer = JsonSerializer.Create(); var streamReader = new StreamReader(data, encoding); var jsonReader = new JsonTextReader(streamReader); // Perform the deserialization and return - return serializer.Deserialize(jsonReader); + try + { + return serializer.Deserialize(jsonReader); + } + catch + { + // Absorb all exceptions + return default; + } } #endregion diff --git a/SabreTools.Serialization/Deserializers/Listrom.cs b/SabreTools.Serialization/Deserializers/Listrom.cs index 364aa118..9b9cadea 100644 --- a/SabreTools.Serialization/Deserializers/Listrom.cs +++ b/SabreTools.Serialization/Deserializers/Listrom.cs @@ -15,6 +15,17 @@ namespace SabreTools.Serialization.Deserializers if (data == null) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the reader and output var reader = new StreamReader(data, Encoding.UTF8); var dat = new MetadataFile(); diff --git a/SabreTools.Serialization/Deserializers/PIC.cs b/SabreTools.Serialization/Deserializers/PIC.cs index 6ebe1a90..dec7a638 100644 --- a/SabreTools.Serialization/Deserializers/PIC.cs +++ b/SabreTools.Serialization/Deserializers/PIC.cs @@ -26,6 +26,9 @@ namespace SabreTools.Serialization.Deserializers // Read the initial disc information di.DataStructureLength = data.ReadUInt16BigEndian(); + if (di.DataStructureLength > data.Length) + return null; + di.Reserved0 = data.ReadByteValue(); di.Reserved1 = data.ReadByteValue(); diff --git a/SabreTools.Serialization/Deserializers/PlayJPlaylist.cs b/SabreTools.Serialization/Deserializers/PlayJPlaylist.cs index d7d08a15..818f87f3 100644 --- a/SabreTools.Serialization/Deserializers/PlayJPlaylist.cs +++ b/SabreTools.Serialization/Deserializers/PlayJPlaylist.cs @@ -58,12 +58,15 @@ namespace SabreTools.Serialization.Deserializers /// /// Stream to parse /// Filled playlist header on success, null on error - private static PlaylistHeader ParsePlaylistHeader(Stream data) + private static PlaylistHeader? ParsePlaylistHeader(Stream data) { // TODO: Use marshalling here instead of building var playlistHeader = new PlaylistHeader(); playlistHeader.TrackCount = data.ReadUInt32(); + if (playlistHeader.TrackCount > int.MaxValue) + return null; + playlistHeader.Data = data.ReadBytes(52); return playlistHeader; diff --git a/SabreTools.Serialization/Deserializers/RomCenter.cs b/SabreTools.Serialization/Deserializers/RomCenter.cs index 186064ac..b11f4bcf 100644 --- a/SabreTools.Serialization/Deserializers/RomCenter.cs +++ b/SabreTools.Serialization/Deserializers/RomCenter.cs @@ -15,6 +15,17 @@ namespace SabreTools.Serialization.Deserializers if (data == null) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the reader and output var reader = new IniReader(data, Encoding.UTF8) { diff --git a/SabreTools.Serialization/Deserializers/SeparatedValue.cs b/SabreTools.Serialization/Deserializers/SeparatedValue.cs index ddcc91bd..208c96b3 100644 --- a/SabreTools.Serialization/Deserializers/SeparatedValue.cs +++ b/SabreTools.Serialization/Deserializers/SeparatedValue.cs @@ -90,6 +90,17 @@ namespace SabreTools.Serialization.Deserializers if (data == null) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the reader and output var reader = new SeparatedValueReader(data, Encoding.UTF8) { diff --git a/SabreTools.Serialization/Deserializers/XmlFile.cs b/SabreTools.Serialization/Deserializers/XmlFile.cs index 26aa56e3..e482cf0c 100644 --- a/SabreTools.Serialization/Deserializers/XmlFile.cs +++ b/SabreTools.Serialization/Deserializers/XmlFile.cs @@ -9,15 +9,26 @@ namespace SabreTools.Serialization.Deserializers /// Base class for other XML deserializers /// /// - public class XmlFile : BaseBinaryDeserializer + public abstract class XmlFile : BaseBinaryDeserializer { /// public override T? Deserialize(Stream? data) { - // If the stream is null - if (data == null) + // If the stream is invalid + if (data == null || !data.CanRead) return default; + try + { + // If the stream length and offset are invalid + if (data.Length == 0 || data.Position < 0 || data.Position >= data.Length) + return default; + } + catch + { + // Ignore errors in getting position for compressed streams + } + // Setup the serializer and the reader var serializer = new XmlSerializer(typeof(T)); var settings = new XmlReaderSettings @@ -33,7 +44,15 @@ namespace SabreTools.Serialization.Deserializers var xmlReader = XmlReader.Create(streamReader, settings); // Perform the deserialization and return - return (T?)serializer.Deserialize(xmlReader); + try + { + return (T?)serializer.Deserialize(xmlReader); + } + catch + { + // Absorb all exceptions + return default; + } } } } \ No newline at end of file