From cff722ba67261a60942a50610ced5e9a246be791 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 13 Mar 2026 12:10:45 -0400 Subject: [PATCH] Fix issues found during testing --- .../Models/XboxExecutable/Certificate.cs | 2 ++ .../Models/XboxExecutable/Enums.cs | 36 +++++++++---------- .../Readers/XboxExecutable.cs | 2 +- .../Wrappers/XboxExecutable.Printing.cs | 14 ++++---- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/SabreTools.Serialization/Models/XboxExecutable/Certificate.cs b/SabreTools.Serialization/Models/XboxExecutable/Certificate.cs index b58f0185..c3acaa89 100644 --- a/SabreTools.Serialization/Models/XboxExecutable/Certificate.cs +++ b/SabreTools.Serialization/Models/XboxExecutable/Certificate.cs @@ -74,5 +74,7 @@ namespace SabreTools.Data.Models.XboxExecutable /// 16 x 16-byte Signature Keys. An unsigned .XBE can just zero these out. /// public byte[][] AlternateSignatureKeys { get; set; } = new byte[16][]; + + // TODO: Add optional fields from https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/master/src/common/xbe/Xbe.h } } diff --git a/SabreTools.Serialization/Models/XboxExecutable/Enums.cs b/SabreTools.Serialization/Models/XboxExecutable/Enums.cs index 758b6bb6..daac0627 100644 --- a/SabreTools.Serialization/Models/XboxExecutable/Enums.cs +++ b/SabreTools.Serialization/Models/XboxExecutable/Enums.cs @@ -9,19 +9,19 @@ namespace SabreTools.Data.Models.XboxExecutable [Flags] public enum AllowedMediaTypes : uint { - XBEIMAGE_MEDIA_TYPE_HARD_DISK = 0x00000001, - XBEIMAGE_MEDIA_TYPE_DVD_X2 = 0x00000002, - XBEIMAGE_MEDIA_TYPE_DVD_CD = 0x00000004, - XBEIMAGE_MEDIA_TYPE_CD = 0x00000008, - XBEIMAGE_MEDIA_TYPE_DVD_5_RO = 0x00000010, - XBEIMAGE_MEDIA_TYPE_DVD_9_RO = 0x00000020, - XBEIMAGE_MEDIA_TYPE_DVD_5_RW = 0x00000040, - XBEIMAGE_MEDIA_TYPE_DVD_9_RW = 0x00000080, - XBEIMAGE_MEDIA_TYPE_DONGLE = 0x00000100, - XBEIMAGE_MEDIA_TYPE_MEDIA_BOARD = 0x00000200, - XBEIMAGE_MEDIA_TYPE_NONSECURE_HARD_DISK = 0x40000000, - XBEIMAGE_MEDIA_TYPE_NONSECURE_MODE = 0x80000000, - XBEIMAGE_MEDIA_TYPE_MEDIA_MASK = 0x00FFFFFF, + HARD_DISK = 0x00000001, + DVD_X2 = 0x00000002, + DVD_CD = 0x00000004, + CD = 0x00000008, + DVD_5_RO = 0x00000010, + DVD_9_RO = 0x00000020, + DVD_5_RW = 0x00000040, + DVD_9_RW = 0x00000080, + DONGLE = 0x00000100, + MEDIA_BOARD = 0x00000200, + NONSECURE_HARD_DISK = 0x40000000, + NONSECURE_MODE = 0x80000000, + MEDIA_MASK = 0x00FFFFFF, } /// @@ -31,10 +31,10 @@ namespace SabreTools.Data.Models.XboxExecutable [Flags] public enum GameRegion : uint { - XBEIMAGE_GAME_REGION_NA = 0x00000001, - XBEIMAGE_GAME_REGION_JAPAN = 0x00000002, - XBEIMAGE_GAME_REGION_RESTOFWORLD = 0x00000004, - XBEIMAGE_GAME_REGION_MANUFACTURING = 0x80000000, + NA = 0x00000001, + JAPAN = 0x00000002, + RESTOFWORLD = 0x00000004, + MANUFACTURING = 0x80000000, } /// @@ -55,7 +55,7 @@ namespace SabreTools.Data.Models.XboxExecutable /// /// [Flags] - public enum LibraryFlags : uint + public enum LibraryFlags : ushort { /// 13-Bit Mask QFEVersion = 0x1FFF, diff --git a/SabreTools.Serialization/Readers/XboxExecutable.cs b/SabreTools.Serialization/Readers/XboxExecutable.cs index 8aa8438f..e5e02667 100644 --- a/SabreTools.Serialization/Readers/XboxExecutable.cs +++ b/SabreTools.Serialization/Readers/XboxExecutable.cs @@ -236,7 +236,7 @@ namespace SabreTools.Serialization.Readers obj.MajorVersion = data.ReadUInt16LittleEndian(); obj.MinorVersion = data.ReadUInt16LittleEndian(); obj.BuildVersion = data.ReadUInt16LittleEndian(); - obj.LibraryFlags = (LibraryFlags)data.ReadUInt32LittleEndian(); + obj.LibraryFlags = (LibraryFlags)data.ReadUInt16LittleEndian(); return obj; } diff --git a/SabreTools.Serialization/Wrappers/XboxExecutable.Printing.cs b/SabreTools.Serialization/Wrappers/XboxExecutable.Printing.cs index d10b6707..3530684f 100644 --- a/SabreTools.Serialization/Wrappers/XboxExecutable.Printing.cs +++ b/SabreTools.Serialization/Wrappers/XboxExecutable.Printing.cs @@ -23,8 +23,8 @@ namespace SabreTools.Serialization.Wrappers Print(builder, Model.SectionHeaders); Print(builder, Model.ThreadLocalStorage); Print(builder, Model.LibraryVersions); - Print(builder, Model.KernelLibraryVersion, "Kernel ", 2); - Print(builder, Model.XAPILibraryVersion, "XAPI ", 2); + Print(builder, Model.KernelLibraryVersion, "Kernel ", string.Empty, 2); + Print(builder, Model.XAPILibraryVersion, "XAPI ", string.Empty, 2); } private static void Print(StringBuilder builder, Certificate? certificate) @@ -42,7 +42,7 @@ namespace SabreTools.Serialization.Wrappers builder.AppendLine(certificate.TimeDate, " Time/Date stamp"); builder.AppendLine(certificate.TitleID, " Title ID"); builder.AppendLine(certificate.TitleName, " Title name"); - builder.AppendLine(Encoding.Unicode.GetString(certificate.TitleName), " Title name (Unicode)"); + builder.AppendLine(Encoding.Unicode.GetString(certificate.TitleName).TrimEnd('\0'), " Title name (Unicode)"); builder.AppendLine(certificate.AlternativeTitleIDs, " Alternative title IDs"); builder.AppendLine($" Allowed media types: {certificate.AllowedMediaTypes} (0x{certificate.AllowedMediaTypes:X})"); builder.AppendLine($" Game region: {certificate.GameRegion} (0x{certificate.GameRegion:X})"); @@ -100,9 +100,9 @@ namespace SabreTools.Serialization.Wrappers builder.AppendLine(); } - private static void Print(StringBuilder builder, LibraryVersion? libraryVersion, string prefix, int padding) + private static void Print(StringBuilder builder, LibraryVersion? libraryVersion, string prefix, string postfix, int padding) { - builder.AppendLine($"{"".PadLeft(padding)}{prefix}Library Version Information:"); + builder.AppendLine($"{"".PadLeft(padding)}{prefix}Library Version Information{postfix}:"); builder.AppendLine($"{"".PadLeft(padding)}-------------------------"); if (libraryVersion is null) { @@ -112,7 +112,7 @@ namespace SabreTools.Serialization.Wrappers } builder.AppendLine(libraryVersion.LibraryName, $"{"".PadLeft(padding)}Library name"); - builder.AppendLine(Encoding.ASCII.GetString(libraryVersion.LibraryName), $"{"".PadLeft(padding)}Library name (ASCII)"); + builder.AppendLine(Encoding.ASCII.GetString(libraryVersion.LibraryName).TrimEnd('\0'), $"{"".PadLeft(padding)}Library name (ASCII)"); builder.AppendLine(libraryVersion.MajorVersion, $"{"".PadLeft(padding)}Major version"); builder.AppendLine(libraryVersion.MinorVersion, $"{"".PadLeft(padding)}Minor version"); builder.AppendLine(libraryVersion.BuildVersion, $"{"".PadLeft(padding)}Build version"); @@ -134,7 +134,7 @@ namespace SabreTools.Serialization.Wrappers for (int i = 0; i < entries!.Length; i++) { var entry = entries[i]; - Print(builder, entry, string.Empty, 4); + Print(builder, entry, string.Empty, $" {i}", 4); } builder.AppendLine();