From 520ebba49f4514ba9cfc68e4caaa0f4f9e3ccaa3 Mon Sep 17 00:00:00 2001 From: Kenneth Reuter Date: Wed, 1 Apr 2026 12:13:44 -0400 Subject: [PATCH 1/3] Fixing an issue where the Overrides in the [Content_Types].xml file in the package are not honored. --- src/Sign.Cli/Properties/launchSettings.json | 4 ++-- src/Sign.Core/Tools/VsixSignTool/OpcPart.cs | 7 +++++-- .../Tools/VSIXSignTool/OpcPackageTests.cs | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/Sign.Cli/Properties/launchSettings.json b/src/Sign.Cli/Properties/launchSettings.json index 1c6dbb5e..a27a3cbf 100644 --- a/src/Sign.Cli/Properties/launchSettings.json +++ b/src/Sign.Cli/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "Sign.Cli": { "commandName": "Project", - "commandLineArgs": "code certificate-store -b C:\\Trash -v trace -cf C:\\git\\Entropy\\MakeTestCert\\af994810f3d0d01b5f6f37e8be085e1a537d40c9.pfx -cfp 0695cf4875ae67f2194ea4c2cbcdcb1327c6874d5949321c4d8028bed308b7a6 MakeTestCert.dll -o MakeTestCert.signed.dll" + "commandLineArgs": "code azure-key-vault C:\\Users\\kereuter\\Downloads\\check2303.vsix --azure-key-vault-url https://hlk-shared-kv.vault.azure.net/ --azure-key-vault-certificate TestHlk-Code -o C:\\Users\\kereuter\\Downloads\\NETSignTool\\output -v trace" } } -} +} \ No newline at end of file diff --git a/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs b/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs index fe29ae8e..e7456eb0 100644 --- a/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs +++ b/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs @@ -60,7 +60,10 @@ public string ContentType { var extension = Path.GetExtension(_path)?.TrimStart('.'); - return Package.ContentTypes.FirstOrDefault(ct => string.Equals(ct.Extension, extension, StringComparison.OrdinalIgnoreCase))?.ContentType ?? OpcKnownMimeTypes.OctetString; + var defaultContentType = Package.ContentTypes.FirstOrDefault(ct => string.Equals(ct.Extension, extension, StringComparison.OrdinalIgnoreCase)); + var overrideContentType = Package.ContentTypes.FirstOrDefault(ct => string.Equals(ct.PartName?.Trim('/'), _path, StringComparison.OrdinalIgnoreCase)); + + return overrideContentType?.ContentType ?? defaultContentType?.ContentType ?? OpcKnownMimeTypes.OctetString; } } @@ -111,4 +114,4 @@ private OpcRelationships ConstructRelationships() /// public override int GetHashCode() => Uri.GetHashCode(); } -} \ No newline at end of file +} diff --git a/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs b/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs index 70412630..c0398721 100644 --- a/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs +++ b/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs @@ -7,6 +7,7 @@ namespace Sign.Core.Test public class OpcPackageTests : IDisposable { private static readonly string SamplePackage = Path.Combine(".", "TestAssets", "VSIXSamples", "OpenVsixSignToolTest.vsix"); + private static readonly string SamplePackageWithOverrides = Path.Combine(".", "TestAssets", "VSIXSamples", "OpenVsixSignToolTest-Overrides.vsix"); private static readonly string SamplePackageSigned = Path.Combine(".", "TestAssets", "VSIXSamples", "OpenVsixSignToolTest-Signed.vsix"); private readonly List _shadowFiles = new List(); @@ -187,6 +188,24 @@ public void ShouldReturnSignatureForSignedPackage() } } + [Fact] + public void ShouldHonorContentTypeIfOverrideIsListedInContentTypesFile() + { + string path; + using (var package = ShadowCopyPackage(SamplePackageWithOverrides, out path, OpcPackageFileMode.ReadWrite)) + { + var partToCheck = new Uri("/extension.vsixmanifest", UriKind.Relative); + var part = package.GetPart(partToCheck); + Assert.True(part != null && part.ContentType == "text/xml"); + } + using (var package = OpcPackage.Open(path, OpcPackageFileMode.ReadWrite)) + { + var partToCheck = new Uri("/extension.vsixmanifest", UriKind.Relative); + var part = package.GetPart(partToCheck); + Assert.True(part != null && part.ContentType == "text/xml"); + } + } + private OpcPackage ShadowCopyPackage(string packagePath, out string path, OpcPackageFileMode mode = OpcPackageFileMode.Read) { var temp = Path.GetTempFileName(); From 567aba530451ed8293f258fae2579db69bda9b09 Mon Sep 17 00:00:00 2001 From: Kenneth Reuter Date: Wed, 1 Apr 2026 12:15:39 -0400 Subject: [PATCH 2/3] Reverting change to json --- src/Sign.Cli/Properties/launchSettings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Sign.Cli/Properties/launchSettings.json b/src/Sign.Cli/Properties/launchSettings.json index a27a3cbf..1c6dbb5e 100644 --- a/src/Sign.Cli/Properties/launchSettings.json +++ b/src/Sign.Cli/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "Sign.Cli": { "commandName": "Project", - "commandLineArgs": "code azure-key-vault C:\\Users\\kereuter\\Downloads\\check2303.vsix --azure-key-vault-url https://hlk-shared-kv.vault.azure.net/ --azure-key-vault-certificate TestHlk-Code -o C:\\Users\\kereuter\\Downloads\\NETSignTool\\output -v trace" + "commandLineArgs": "code certificate-store -b C:\\Trash -v trace -cf C:\\git\\Entropy\\MakeTestCert\\af994810f3d0d01b5f6f37e8be085e1a537d40c9.pfx -cfp 0695cf4875ae67f2194ea4c2cbcdcb1327c6874d5949321c4d8028bed308b7a6 MakeTestCert.dll -o MakeTestCert.signed.dll" } } -} \ No newline at end of file +} From 6cd761198c28cfaf0d3e011834f3541a57f7fcac Mon Sep 17 00:00:00 2001 From: Kenneth Reuter Date: Wed, 1 Apr 2026 12:16:33 -0400 Subject: [PATCH 3/3] Adding new vsix package for testing --- .../OpenVsixSignToolTest-Overrides.vsix | Bin 0 -> 1013 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/Sign.Core.Test/TestAssets/VSIXSamples/OpenVsixSignToolTest-Overrides.vsix diff --git a/test/Sign.Core.Test/TestAssets/VSIXSamples/OpenVsixSignToolTest-Overrides.vsix b/test/Sign.Core.Test/TestAssets/VSIXSamples/OpenVsixSignToolTest-Overrides.vsix new file mode 100644 index 0000000000000000000000000000000000000000..7b243bcd13d27ffc4fc290360243cc82f989978f GIT binary patch literal 1013 zcmWIWW@Zs#U|`^2n5@tkQ^E0K+Y=z~CL;rbFp!RR&d)1J%`1rysVqn>j@7Hk&6zsU z*YB_cPwRDs!uE@AgxSS77A}bu*><3bJ3`ps>eZjjH(?KRbS#9z6TFVFb%yDzeg56{ z_0P|L7ssDJxSCnCOq1`|uD4qjWn6mk$mGS|8_)dKhlfx9`#M@Jtkm+;g6&E_aT zV=9_$bad5?5GF6#(=3u_`P7?cuiMQ!c~QU=w?3ZOO!2?Wk$0*C`-?-TyJyH zFa0@po~RmHls$PKa(DmnlX+e@bmx5g@n&Y_V@b=MmZe=X2N#)GEw$;ve6$gQa_-K3jD? z`YO8o$?6MdAIQ%Ox^VD&laSf&-zpo!AN}(ynGkzx$_CXWHO6US-_FfG>n8A0zDRZJ z#wRPg!XpmIi<%vCT9-Y!H*oR!T@%;I@&z9_E>z!_pL~Amxh?K9=VpA6-?n`9N`Y_T z%AV^kaxOh`>D;Fr^&IBBuDW8qI{iX{RRzwfz7^TK@-FPVFbGK(k8xR zy?eUnf6nQx&BwUdLoYT3>95(h^;xT^ef9or+l3Ov{BCSMGr7Ox!Lz1w&WGmxx$wpu z7OxBphof}^9$!%{W(US62=gMxYffr$@%!ETOMtN&;LXS+!hk!20JSkNGAMv3Ai$Dc zkPX0=m_XVf28aTa81|%vFax{8L1sX}TP7qkK;8)OW@Q6OF$3WNAT19}!wd`no;jd{ literal 0 HcmV?d00001