Merge branch 'master' into sridhar6668/support_extended_ascii

This commit is contained in:
Adam Hathcock
2018-05-05 09:09:09 +01:00
4 changed files with 42 additions and 2 deletions

View File

@@ -48,6 +48,7 @@ namespace SharpCompress.Archives
{
string destinationFileName;
string file = Path.GetFileName(entry.Key);
string fullDestinationDirectoryPath = Path.GetFullPath(destinationDirectory);
options = options ?? new ExtractionOptions()
{
@@ -58,19 +59,35 @@ namespace SharpCompress.Archives
if (options.ExtractFullPath)
{
string folder = Path.GetDirectoryName(entry.Key);
string destdir = Path.Combine(destinationDirectory, folder);
string destdir = Path.GetFullPath(
Path.Combine(fullDestinationDirectoryPath, folder)
);
if (!Directory.Exists(destdir))
{
if (!destdir.StartsWith(fullDestinationDirectoryPath))
{
throw new ExtractionException("Entry is trying to create a directory outside of the destination directory.");
}
Directory.CreateDirectory(destdir);
}
destinationFileName = Path.Combine(destdir, file);
}
else
{
destinationFileName = Path.Combine(destinationDirectory, file);
destinationFileName = Path.Combine(fullDestinationDirectoryPath, file);
}
if (!entry.IsDirectory)
{
destinationFileName = Path.GetFullPath(destinationFileName);
if (!destinationFileName.StartsWith(fullDestinationDirectoryPath))
{
throw new ExtractionException("Entry is trying to write a file outside of the destination directory.");
}
entry.WriteToFile(destinationFileName, options);
}
}

View File

@@ -15,5 +15,6 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
<PackageReference Include="xunit" Version="2.3.1" />
<PackageReference Include="Xunit.SkippableFact" Version="1.3.3" />
</ItemGroup>
</Project>

View File

@@ -433,7 +433,29 @@ namespace SharpCompress.Test.Zip
}
}
}
}
[SkippableFact]
public void Zip_Evil_Throws_Exception()
{
//windows only because of the paths
Skip.IfNot(Environment.OSVersion.Platform == PlatformID.Win32NT);
string zipFile = Path.Combine(TEST_ARCHIVES_PATH, "Zip.Evil.zip");
Assert.ThrowsAny<Exception>(() => {
using (var archive = ZipArchive.Open(zipFile))
{
foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory))
{
entry.WriteToDirectory(SCRATCH_FILES_PATH, new ExtractionOptions()
{
ExtractFullPath = true,
Overwrite = true
});
}
}
});
}
class NonSeekableMemoryStream : MemoryStream

Binary file not shown.