Skip to content

Reachable Debug.Assert in InterleavedZipPackagePartStream.Length #123816

@vcsjones

Description

@vcsjones

In System.IO.Packaging, InterleavedZipPackagePartStream.Length asserts that CanSeek is true here:

However this is not always true, and this assert is reachable from public APIs.

Using the existing PartPieceTests test fixture and data, the following unit test will hit the Debug.Assert:

[Fact]
public void InterleavedZipPackagePartStream_Length_Assert()
{
    using MemoryStream package = new(_partPieceSampleZipPackage);

    using Package zipPackage = Package.Open(package, FileMode.Open, FileAccess.Read);
    PackagePart partEntry = zipPackage.GetPart(new Uri("/ReadablePartPieceEntry.bin", UriKind.Relative));
    using Stream stream = partEntry.GetStream(FileMode.Open);
    Assert.NotEqual(0, stream.Length);
}

The assertion:

Stack Trace:
     at Microsoft.VisualStudio.TestPlatform.TestHost.TestHostTraceListener.GetException(String message)
   at Microsoft.VisualStudio.TestPlatform.TestHost.TestHostTraceListener.Fail(String message, String detailMessage)
   at System.Diagnostics.TraceInternal.Fail(String message, String detailMessage) in /Users/vcsjones/Projects/runtime/src/libraries/System.Diagnostics.TraceSource/src/System/Diagnostics/TraceInternal.cs:line 261
   at System.Diagnostics.TraceInternal.TraceProvider.Fail(String message, String detailMessage) in /Users/vcsjones/Projects/runtime/src/libraries/System.Diagnostics.TraceSource/src/System/Diagnostics/TraceInternal.cs:line 17
   at System.Diagnostics.Debug.Fail(String message, String detailMessage) in /Users/vcsjones/Projects/runtime/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Debug.cs:line 135
   at System.Diagnostics.Debug.Assert(Boolean condition, String message, String detailMessage) in /Users/vcsjones/Projects/runtime/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Debug.cs:line 99
   at System.Diagnostics.Debug.Assert(Boolean condition, String message) in /Users/vcsjones/Projects/runtime/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Debug.cs:line 88
   at System.IO.Packaging.InterleavedZipPackagePartStream.get_Length() in /Users/vcsjones/Projects/runtime/src/libraries/System.IO.Packaging/src/System/IO/Packaging/InterleavedZipPackagePartStream.cs:line 480
   at System.IO.Packaging.Tests.PartPieceTests.InterleavedZipPackagePartStream_Length_Assert() in /Users/vcsjones/Projects/runtime/src/libraries/System.IO.Packaging/tests/PartPieceTests.cs:line 609

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions