Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,7 @@ internal sealed class NoSyncCallsStream : Stream
public override long Position { get => _s.Position; set => _s.Position = value; }
public override int ReadTimeout { get => _s.ReadTimeout; set => _s.ReadTimeout = value; }
public override int WriteTimeout { get => _s.WriteTimeout; set => _s.WriteTimeout = value; }
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state) => _s.BeginRead(buffer, offset, count, callback, state);
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state) => _s.BeginWrite(buffer, offset, count, callback, state);
public override void Close() => _s.Close();
public override int EndRead(IAsyncResult asyncResult) => _s.EndRead(asyncResult);
public override void EndWrite(IAsyncResult asyncResult) => _s.EndWrite(asyncResult);
public override bool Equals(object? obj) => _s.Equals(obj);
public override int GetHashCode() => _s.GetHashCode();
public override int ReadByte() => _s.ReadByte();
Expand All @@ -37,6 +33,10 @@ internal sealed class NoSyncCallsStream : Stream
public override string? ToString() => _s.ToString();

// Sync
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state) =>
IsRestrictionEnabled ? throw new InvalidOperationException() : _s.BeginRead(buffer, offset, count, callback, state);
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state) =>
IsRestrictionEnabled ? throw new InvalidOperationException() : _s.BeginRead(buffer, offset, count, callback, state);
public override void CopyTo(Stream destination, int bufferSize)
{
if (IsRestrictionEnabled)
Expand All @@ -60,6 +60,18 @@ protected override void Dispose(bool disposing)
_s.Dispose();
}
}
public override int EndRead(IAsyncResult asyncResult) => IsRestrictionEnabled ? throw new InvalidOperationException() : _s.EndRead(asyncResult);
public override void EndWrite(IAsyncResult asyncResult)
{
if (IsRestrictionEnabled)
{
throw new InvalidOperationException();
}
else
{
_s.EndWrite(asyncResult);
}
}
public override void Flush()
{
if (IsRestrictionEnabled)
Expand Down
24 changes: 12 additions & 12 deletions src/libraries/Common/tests/System/IO/Compression/ZipTestHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -322,16 +322,16 @@ private static string FlipSlashes(string name)
public static FileStream CreateFileStreamRead(bool async, string fileName) =>
new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: async);

public static void DirsEqual(string actual, string expected)
public static async Task DirsEqual(string actual, string expected)
{
var expectedList = FileData.InPath(expected);
var actualList = Directory.GetFiles(actual, "*.*", SearchOption.AllDirectories);
var actualFolders = Directory.GetDirectories(actual, "*.*", SearchOption.AllDirectories);
var actualCount = actualList.Length + actualFolders.Length;
Assert.Equal(expectedList.Count, actualCount);

ItemEqual(actualList, expectedList, isFile: true);
ItemEqual(actualFolders, expectedList, isFile: false);
await ItemEqual(actualList, expectedList, isFile: true);
await ItemEqual(actualFolders, expectedList, isFile: false);
}

public static void DirFileNamesEqual(string actual, string expected)
Expand All @@ -341,7 +341,7 @@ public static void DirFileNamesEqual(string actual, string expected)
AssertExtensions.SequenceEqual(expectedEntries.Select(Path.GetFileName).ToArray(), actualEntries.Select(Path.GetFileName).ToArray());
}

private static void ItemEqual(string[] actualList, List<FileData> expectedList, bool isFile)
private static async Task ItemEqual(string[] actualList, List<FileData> expectedList, bool isFile)
{
for (int i = 0; i < actualList.Length; i++)
{
Expand All @@ -362,8 +362,8 @@ private static void ItemEqual(string[] actualList, List<FileData> expectedList,
//contents same
if (isFile)
{
Stream sa = StreamHelpers.CreateTempCopyStream(aEntry).Result;
Stream sb = StreamHelpers.CreateTempCopyStream(bEntry).Result;
Stream sa = await StreamHelpers.CreateTempCopyStream(aEntry);
Stream sb = await StreamHelpers.CreateTempCopyStream(bEntry);
StreamsEqual(sa, sb); // Not testing zip features, can always be async
}
}
Expand Down Expand Up @@ -597,9 +597,9 @@ public static IEnumerable<object[]> Utf8Comment_Data()
}

foreach (object[] e in SharedComment_Data())
{
yield return e;
}
{
yield return e;
}
}

// Returns pairs as expected by Latin1
Expand All @@ -617,9 +617,9 @@ public static IEnumerable<object[]> Latin1Comment_Data()
}

foreach (object[] e in SharedComment_Data())
{
yield return e;
}
{
yield return e;
}
}

// Returns pairs encoded with Latin1, but decoded with UTF8.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

namespace System.IO.Compression.Tests;

[SkipOnPlatform(TestPlatforms.Browser, "https://github.com/dotnet/runtime/issues/114769")]
public class ZipFile_Extract_Stream : ZipFileTestBase
{
[Fact]
Expand Down Expand Up @@ -47,7 +46,7 @@ public async Task ExtractToDirectoryNormal(string file, string folder, bool asyn
string folderName = zfolder(folder);
using TempDirectory tempFolder = new(GetTestFilePath());
await CallZipFileExtractToDirectory(async, source, tempFolder.Path);
DirsEqual(tempFolder.Path, folderName);
await DirsEqual(tempFolder.Path, folderName);
await DisposeStream(async, source);
}

Expand All @@ -74,7 +73,7 @@ public async Task ExtractToDirectoryNormal_Unwritable_Unseekable(string file, st
string folderName = zfolder(folder);
using TempDirectory tempFolder = new(GetTestFilePath());
await CallZipFileExtractToDirectory(async, source, tempFolder.Path);
DirsEqual(tempFolder.Path, folderName);
await DirsEqual(tempFolder.Path, folderName);
await DisposeStream(async, fs);
}

Expand Down Expand Up @@ -200,7 +199,7 @@ public async Task ExtractToDirectoryOverwrite(bool async)
source.Position = 0;
await CallZipFileExtractToDirectory(async, source, tempFolder.Path, overwriteFiles: true);

DirsEqual(tempFolder.Path, folderName);
await DirsEqual(tempFolder.Path, folderName);

await DisposeStream(async, source);
}
Expand All @@ -222,7 +221,7 @@ public async Task ExtractToDirectoryOverwriteEncoding(bool async)
source.Position = 0;
await CallZipFileExtractToDirectory(async, source, tempFolder.Path, Encoding.UTF8, overwriteFiles: true);

DirsEqual(tempFolder.Path, folderName);
await DirsEqual(tempFolder.Path, folderName);
}

[Theory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

namespace System.IO.Compression.Tests
{
[SkipOnPlatform(TestPlatforms.Browser, "https://github.com/dotnet/runtime/issues/114769")]
public class ZipFile_Extract : ZipFileTestBase
{
public static IEnumerable<object[]> Get_ExtractToDirectoryNormal_Data()
Expand All @@ -33,7 +32,7 @@ public async Task ExtractToDirectoryNormal(string file, string folder, bool asyn
string folderName = zfolder(folder);
using TempDirectory tempFolder = new TempDirectory(GetTestFilePath());
await CallZipFileExtractToDirectory(async, zipFileName, tempFolder.Path);
DirsEqual(tempFolder.Path, folderName);
await DirsEqual(tempFolder.Path, folderName);
}

[Theory]
Expand Down Expand Up @@ -157,7 +156,7 @@ public async Task ExtractToDirectoryOverwrite(bool async)
await Assert.ThrowsAsync<IOException>(() => CallZipFileExtractToDirectory(async, zipFileName, tempFolder.Path, overwriteFiles: false));
await CallZipFileExtractToDirectory(async, zipFileName, tempFolder.Path, overwriteFiles: true);

DirsEqual(tempFolder.Path, folderName);
await DirsEqual(tempFolder.Path, folderName);
}

[Theory]
Expand All @@ -174,7 +173,7 @@ public async Task ExtractToDirectoryOverwriteEncoding(bool async)
await Assert.ThrowsAsync<IOException>(() => CallZipFileExtractToDirectory(async, zipFileName, tempFolder.Path, Encoding.UTF8, overwriteFiles: false));
await CallZipFileExtractToDirectory(async, zipFileName, tempFolder.Path, Encoding.UTF8, overwriteFiles: true);

DirsEqual(tempFolder.Path, folderName);
await DirsEqual(tempFolder.Path, folderName);
}

[Theory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public async Task ExtractToDirectoryExtension(bool async)
await Assert.ThrowsAsync<ArgumentNullException>(() => CallZipFileExtensionsExtractToDirectory(async, archive, null));
await CallZipFileExtensionsExtractToDirectory(async, archive, tempFolder);

DirsEqual(tempFolder, zfolder("normal"));
await DirsEqual(tempFolder, zfolder("normal"));

await DisposeZipArchive(async, archive);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,10 +281,9 @@ public static async Task ZipArchiveEntry_CorruptedStream_ReadMode_Read_UpToUncom

[Theory]
[MemberData(nameof(Get_Booleans_Data))]
[SkipOnPlatform(TestPlatforms.Browser, "https://github.com/dotnet/runtime/issues/114769")]
public static async Task ZipArchiveEntry_CorruptedStream_EnsureNoExtraBytesReadOrOverWritten(bool async)
{
MemoryStream stream = PopulateStream().Result;
MemoryStream stream = await LocalMemoryStream.ReadAppFileAsync(zfile("normal.zip"));

int nameOffset = PatchDataRelativeToFileName(Encoding.ASCII.GetBytes(s_tamperedFileName), stream, 8); // patch uncompressed size in file header
PatchDataRelativeToFileName(Encoding.ASCII.GetBytes(s_tamperedFileName), stream, 22, nameOffset + s_tamperedFileName.Length); // patch in central directory too
Expand Down Expand Up @@ -315,11 +314,6 @@ public static async Task ZipArchiveEntry_CorruptedStream_EnsureNoExtraBytesReadO
await DisposeZipArchive(async, archive);
}

private static async Task<MemoryStream> PopulateStream()
{
return await LocalMemoryStream.ReadAppFileAsync(zfile("normal.zip"));
}

[Theory]
[MemberData(nameof(Get_Booleans_Data))]
public static async Task Zip64ArchiveEntry_CorruptedStream_CopyTo_UpToUncompressedSize(bool async)
Expand Down
Loading
Loading