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
2 changes: 1 addition & 1 deletion src/Sentry/Internal/Extensions/StreamExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public static Task WriteNewlineAsync(this Stream stream, CancellationToken cance
{
try
{
return stream.Length;
return stream.CanSeek ? stream.Length : null;
}
catch
{
Expand Down
57 changes: 57 additions & 0 deletions test/Sentry.Tests/Internals/Extensions/StreamExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,61 @@ public async Task ReadLineAsync_NoMaxLength_ReadsToTheEnd()
// Assert
Encoding.UTF8.GetString(result).Should().Be(line);
}

[Fact]
public void TryGetLength_SeekableStream_ReturnsLength()
{
// Arrange
using var stream = new MemoryStream(new byte[42]);

// Act
var result = stream.TryGetLength();

// Assert
result.Should().Be(42);
}

[Fact]
public void TryGetLength_NonSeekableStream_ReturnsNull()
{
// Arrange
using var stream = new LengthlessStream();

// Act
var result = stream.TryGetLength();

// Assert
result.Should().BeNull();
}

[Fact]
public void TryGetLength_NonSeekableStreamReportingLength_ReturnsNull()
{
// Arrange
using var stream = new NonSeekableMemoryStream(new byte[42]);

// Act
var result = stream.TryGetLength();

// Assert
result.Should().BeNull();
}
Comment thread
bitsandfoxes marked this conversation as resolved.

[Fact]
public void TryGetLength_NullStream_ReturnsNull()
{
// Arrange
Stream stream = null;

// Act
var result = stream.TryGetLength();

// Assert
result.Should().BeNull();
}

private class NonSeekableMemoryStream(byte[] buffer) : MemoryStream(buffer)
{
public override bool CanSeek => false;
}
}
Loading