Skip to content

Commit 6e249e3

Browse files
authored
Use ordinal to ensure no mistakes on linux
Don't call through the get full directory path Reduce three variables down to two to help the scanners Move the desination path out of the loop since it doesn't change
1 parent 97bc396 commit 6e249e3

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

src/Tasks/sdk-tasks/ExtractArchiveToDirectory.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ public override bool Execute()
8484
if (isZipArchive)
8585
{
8686
using var zip = new ZipArchive(File.OpenRead(SourceArchive));
87+
string fullDestDirPath = GetFullDirectoryPathWithSeperator(DestinationDirectory);
88+
8789
foreach (var entry in zip.Entries)
8890
{
8991
if (ShouldExtractItem(entry.FullName))
9092
{
91-
string destinationPath = Path.Combine(DestinationDirectory, entry.FullName);
92-
string destinationFileName = GetFullDirectoryPathWithSeperator(destinationPath);
93-
string fullDestDirPath = GetFullDirectoryPathWithSeperator(DestinationDirectory);
93+
string destinationPath = Path.GetFullPath(Path.Combine(DestinationDirectory, entry.FullName));
9494

95-
CheckDestinationPath(destinationFileName, fullDestDirPath);
95+
CheckDestinationPath(destinationPath, fullDestDirPath);
9696

9797
if (!Directory.Exists(Path.Combine(DestinationDirectory, Path.GetDirectoryName(entry.FullName))))
9898
{
@@ -116,6 +116,7 @@ public override bool Execute()
116116
using var decompressedStream = new MemoryStream();
117117
decompressor.CopyTo(decompressedStream);
118118
decompressedStream.Seek(0, SeekOrigin.Begin);
119+
string fullDestDirPath = GetFullDirectoryPathWithSeperator(DestinationDirectory);
119120

120121
// Extract Tar content
121122
using TarReader tr = new TarReader(decompressedStream);
@@ -127,11 +128,9 @@ public override bool Execute()
127128
entryName = entryName.StartsWith("./") ? entryName[2..] : entryName;
128129
if (ShouldExtractItem(entryName))
129130
{
130-
string destinationPath = Path.Combine(DestinationDirectory, entryName);
131-
string destinationFileName = GetFullDirectoryPathWithSeperator(destinationPath);
132-
string fullDestDirPath = GetFullDirectoryPathWithSeperator(DestinationDirectory);
131+
string destinationPath = Path.GetFullPath(Path.Combine(DestinationDirectory, entryName));
133132

134-
CheckDestinationPath(destinationFileName, fullDestDirPath);
133+
CheckDestinationPath(destinationPath, fullDestDirPath);
135134

136135
Log.LogMessage(entryName);
137136

@@ -186,7 +185,7 @@ private string GetFullDirectoryPathWithSeperator(string directory)
186185
{
187186
string fullDirectoryPath = Path.GetFullPath(directory);
188187

189-
if (!fullDirectoryPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.OrdinalIgnoreCase))
188+
if (!fullDirectoryPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
190189
{
191190
fullDirectoryPath = string.Concat(fullDirectoryPath, Path.DirectorySeparatorChar);
192191
}
@@ -196,7 +195,7 @@ private string GetFullDirectoryPathWithSeperator(string directory)
196195

197196
private void CheckDestinationPath(string destinationFileName, string fullDestDirPath)
198197
{
199-
if (!destinationFileName.StartsWith(fullDestDirPath, StringComparison.OrdinalIgnoreCase))
198+
if (!destinationFileName.StartsWith(fullDestDirPath, StringComparison.Ordinal))
200199
{
201200
throw new System.InvalidOperationException("Entry is outside the target dir: " + destinationFileName);
202201
}

0 commit comments

Comments
 (0)