Skip to content

Commit 3c7e11b

Browse files
authored
Revert tar.gz unpack/repack but support parsing of .tar.gz FileExtensionSignInfo (#15264)
1 parent 42652ca commit 3c7e11b

File tree

5 files changed

+22
-9
lines changed

5 files changed

+22
-9
lines changed

src/Microsoft.DotNet.Arcade.Sdk/tools/Sign.props

-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
<FileExtensionSignInfo Include=".vsix" CertificateName="VsixSHA2" />
4242
<FileExtensionSignInfo Include=".zip" CertificateName="None" />
4343
<FileExtensionSignInfo Include=".tgz" CertificateName="None" />
44-
<FileExtensionSignInfo Include=".tar.gz" CertificateName="None" />
4544
</ItemGroup>
4645

4746
<!-- The name of the .NET specific certificate, which is a general replacement for Microsoft400

src/Microsoft.DotNet.SignTool.Tests/SignToolTests.cs

+13
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,19 @@ public void ValidateParseFileExtensionEntriesForDifferentCollisionPriorityIdSucc
18221822
runTask(fileExtensionSignInfo: fileExtensionSignInfo.ToArray()).Should().BeTrue();
18231823
}
18241824

1825+
[Fact]
1826+
public void ValidateParseFileExtensionEntriesForTarGzExtensionPasses()
1827+
{
1828+
var fileExtensionSignInfo = new List<ITaskItem>();
1829+
1830+
fileExtensionSignInfo.Add(new TaskItem(".tar.gz", new Dictionary<string, string>
1831+
{
1832+
{ "CertificateName", "None" }
1833+
}));
1834+
1835+
runTask(fileExtensionSignInfo: fileExtensionSignInfo.ToArray()).Should().BeTrue();
1836+
}
1837+
18251838
// Given:
18261839
// - "SameFiles1.zip" contains "Simple1.exe" and "Simple2.exe"
18271840
// - "SameFiles2.zip" contains "Simple1.exe"

src/Microsoft.DotNet.SignTool/src/FileSignInfo.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ internal static bool IsZip(string path)
4040
=> Path.GetExtension(path).Equals(".zip", StringComparison.OrdinalIgnoreCase);
4141

4242
internal static bool IsTarGZip(string path)
43-
=> Path.GetExtension(path).Equals(".tgz", StringComparison.OrdinalIgnoreCase)
44-
|| (Path.GetExtension(path).Equals(".gz", StringComparison.OrdinalIgnoreCase)
45-
&& Path.GetExtension(Path.GetFileNameWithoutExtension(path)).Equals(".tar", StringComparison.OrdinalIgnoreCase));
43+
=> Path.GetExtension(path).EndsWith(".tgz", StringComparison.OrdinalIgnoreCase);
4644

4745
internal static bool IsWix(string path)
4846
=> (Path.GetExtension(path).Equals(".msi", StringComparison.OrdinalIgnoreCase)

src/Microsoft.DotNet.SignTool/src/SignToolTask.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,11 @@ int getCommonPrefixLength(string[] dir1, string[] dir2)
360360
}
361361
}
362362

363+
private readonly HashSet<string> specialExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
364+
{
365+
".tar.gz"
366+
};
367+
363368
private Dictionary<string, List<SignInfo>> ParseFileExtensionSignInfo()
364369
{
365370
var map = new Dictionary<string, List<SignInfo>>(StringComparer.OrdinalIgnoreCase);
@@ -372,9 +377,8 @@ private Dictionary<string, List<SignInfo>> ParseFileExtensionSignInfo()
372377
var certificate = item.GetMetadata("CertificateName");
373378
var collisionPriorityId = item.GetMetadata(SignToolConstants.CollisionPriorityId);
374379

375-
// Path.GetExtension will return .gz for .tar.gz files, so we need to handle that case separately
376-
var actualExtension = extension.Equals(".tar.gz", StringComparison.OrdinalIgnoreCase) ? ".tar.gz" : Path.GetExtension(extension);
377-
if (!extension.Equals(actualExtension))
380+
// Some supported extensions have multiple dots. Special case these so that we don't throw an error below.
381+
if (!extension.Equals(Path.GetExtension(extension)) && !specialExtensions.Contains(extension))
378382
{
379383
Log.LogError($"Value of {nameof(FileExtensionSignInfo)} is invalid: '{extension}'");
380384
continue;

src/Microsoft.DotNet.VersionTools/lib/src/BuildManifest/Model/SigningInformationParsingExtensions.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ public static IEnumerable<FileExtensionSignInfoModel> ThrowIfInvalidFileExtensio
3838
throw new ArgumentException($"Value of FileExtensionSignInfo 'Include' is invalid, must be non-empty.");
3939
}
4040

41-
string extension = signInfo.Include.Equals(".tar.gz", StringComparison.OrdinalIgnoreCase) ? ".tar.gz" : Path.GetExtension(signInfo.Include);
42-
if (!signInfo.Include.Equals(extension))
41+
if (!signInfo.Include.Equals(Path.GetExtension(signInfo.Include)))
4342
{
4443
throw new ArgumentException($"Value of FileExtensionSignInfo Include is invalid: '{signInfo.Include}' is not returned by Path.GetExtension('{signInfo.Include}')");
4544
}

0 commit comments

Comments
 (0)