From 605c3b9682029f6cc9a8f585f277373f991777d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20L=C3=B6rwald?= Date: Wed, 12 Feb 2025 20:36:30 +0100 Subject: [PATCH 1/3] ensure install is \-normalized --- TACTSharp/InstallInstance.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TACTSharp/InstallInstance.cs b/TACTSharp/InstallInstance.cs index d12eab8..f1f2578 100644 --- a/TACTSharp/InstallInstance.cs +++ b/TACTSharp/InstallInstance.cs @@ -60,7 +60,7 @@ public unsafe InstallInstance(string path) this.Entries = []; for (var i = 0; i < this.NumEntries; i++) { - var name = installData[offs..].ReadNullTermString(); + var name = installData[offs..].ReadNullTermString().Replace('/', '\\'); offs += name.Length + 1; var contentHash = installData.Slice(offs, this.HashSize).ToArray(); @@ -90,7 +90,7 @@ public struct InstallTagEntry public struct InstallFileEntry { - public string name; + public string name; // Normalized to \, but not enforced upper/lowercase. public byte[] md5; public uint size; public string[] tags; From d6eea525c71608a587c73e82567bfb109e6da55f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20L=C3=B6rwald?= Date: Wed, 12 Feb 2025 20:36:39 +0100 Subject: [PATCH 2/3] \-normalize filenames when looking in install --- TACTTool/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TACTTool/Program.cs b/TACTTool/Program.cs index 8caa670..bff5bca 100644 --- a/TACTTool/Program.cs +++ b/TACTTool/Program.cs @@ -376,7 +376,7 @@ private static void HandleFDID(BuildInstance build, string fdid, string? filenam private static void HandleFileName(BuildInstance build, string filename, string? outputFilename) { - var fileEntries = build.Install.Entries.Where(x => x.name.Equals(filename, StringComparison.InvariantCultureIgnoreCase)).ToList(); + var fileEntries = build.Install.Entries.Where(x => x.name.Equals(filename.Replace('/', '\\'), StringComparison.InvariantCultureIgnoreCase)).ToList(); if (fileEntries.Count == 0) { using (var hasher = new Jenkins96()) From 7b26eb277dd579839a19723575430fb272605148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20L=C3=B6rwald?= Date: Wed, 12 Feb 2025 20:43:18 +0100 Subject: [PATCH 3/3] host-localize paths on extraction --- TACTTool/Program.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TACTTool/Program.cs b/TACTTool/Program.cs index bff5bca..e7de7f9 100644 --- a/TACTTool/Program.cs +++ b/TACTTool/Program.cs @@ -131,6 +131,9 @@ static async Task Main(string[] args) { var (eKey, decodedSize, fileName) = target; + fileName = fileName.Replace('\\', Path.DirectorySeparatorChar); + fileName = fileName.Replace('/', Path.DirectorySeparatorChar); + Console.WriteLine("Extracting " + Convert.ToHexStringLower(eKey) + " to " + fileName); try