From 48f1f66fa2bc8012cb36b8ab7345c398aeaa6a31 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Thu, 11 Dec 2025 17:13:31 +0900 Subject: [PATCH] Fix some bugs (Catswords.Phantomizer) Fix some bugs (Catswords.Phantomizer) --- .../Catswords.Phantomizer/AssemblyLoader.cs | 16 +++++++++++++++- WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs | 17 ++++++++++++++++- .../Resources/Catswords.Phantomizer.dll.gz | Bin 16865 -> 18232 bytes 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs b/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs index a22d509..b5aa2a6 100644 --- a/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs +++ b/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs @@ -551,7 +551,6 @@ namespace Catswords.Phantomizer } } - private static void EnsureSignedFileOrThrow(string path, string logicalName) { if (!File.Exists(path)) @@ -602,6 +601,21 @@ namespace Catswords.Phantomizer } Trace.TraceError("AssemblyIntegrity: hash mismatch! SHA256={0}", sha256); + + // Delete corrupted file so the next run can re-download a clean copy. + if (File.Exists(path)) + { + try + { + File.Delete(path); + Trace.TraceInformation("AssemblyIntegrity: deleted corrupted file {0}", path); + } + catch (Exception ex) + { + Trace.TraceWarning("AssemblyIntegrity: failed to delete corrupted file {0}: {1}", path, ex.Message); + } + } + throw new InvalidOperationException("AssemblyIntegrity check failed for: " + path); } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs index 5302310..bbea457 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs @@ -132,7 +132,7 @@ namespace WelsonJS.Launcher loaderType.GetProperty("BaseUrl")?.SetValue(null, GetAppConfig("AssemblyBaseUrl")); loaderType.GetProperty("LoaderNamespace")?.SetValue(null, typeof(Program).Namespace); loaderType.GetProperty("AppName")?.SetValue(null, "WelsonJS"); - //loaderType.GetProperty("IntegrityUrl")?.SetValue(null, GetAppConfig("AssemblyIntegrityUrl")); // In the future, we may use this to verify integrity. + loaderType.GetProperty("IntegrityUrl")?.SetValue(null, GetAppConfig("AssemblyIntegrityUrl")); loaderType.GetMethod("Register")?.Invoke(null, null); var loadNativeModulesMethod = loaderType.GetMethod( @@ -154,6 +154,21 @@ namespace WelsonJS.Launcher new Version(1, 13, 0, 0), new[] { "ChakraCore.dll" } }); + + /* + // Alternative way using direct type reference + AssemblyLoader.BaseUrl = GetAppConfig("AssemblyBaseUrl"); // Configure CDN base URL + AssemblyLoader.IntegrityUrl = GetAppConfig("AssemblyIntegrityUrl"); // (Optional) Set the integrity URL + AssemblyLoader.LoaderNamespace = typeof(Program).Namespace; + AssemblyLoader.AppName = "WelsonJS"; + AssemblyLoader.Register(); + + AssemblyLoader.LoadNativeModules( + "ChakraCore", + new Version(1, 13, 0, 0), + new[] { "ChakraCore.dll" } + ); + */ } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Resources/Catswords.Phantomizer.dll.gz b/WelsonJS.Toolkit/WelsonJS.Launcher/Resources/Catswords.Phantomizer.dll.gz index 57569a7f8108ac08a6722c3e9530a5691431d08b..53a62de26704e852d56629c7e1c0a1ded0d02a8a 100644 GIT binary patch literal 18232 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 literal 16865 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