imazen / imageflow-dotnet

The official .NET API for Imageflow, the Rust image processing and optimization engine for web servers
GNU Affero General Public License v3.0
143 stars 25 forks source link

Incorrect exception when passing stream that does not expose a buffer #58

Closed mpec closed 3 months ago

mpec commented 5 months ago

When passing a MemoryStream that does not expose buffer via this method: https://learn.microsoft.com/en-us/dotnet/api/system.io.memorystream.trygetbuffer?view=net-8.0 I get the following exception:

System.OverflowException:
   at Imageflow.Fluent.BufferedStreamSource.TryGetWrittenMemory (Imageflow.Net, Version=0.13.1.0, Culture=neutral, PublicKeyToken=null)
   at Imageflow.Fluent.BufferedStreamSource+<BorrowReadOnlyMemoryAsync>d__8.MoveNext (Imageflow.Net, Version=0.13.1.0, Culture=neutral, PublicKeyToken=null)
[snip]
, Message: Streams cannot exceed 2GB 

When running code:

var memorySource = BufferedStreamSource.BorrowEntireStream(sanitizedStream);
var info = await ImageJob.GetImageInfoAsync(memorySource, SourceLifetime.Borrowed);

I think this should be validated when creating BufferedStreamSource and more appropriate exception be thrown.

lilith commented 5 months ago

To repro and fix this I need the stream class you're using.

On Mon, Apr 8, 2024, 8:11 AM Marcin @.***> wrote:

When passing a MemoryStream that does not expose buffer via this method: https://learn.microsoft.com/en-us/dotnet/api/system.io.memorystream.trygetbuffer?view=net-8.0 I get the following exception:

System.OverflowException: at Imageflow.Fluent.BufferedStreamSource.TryGetWrittenMemory (Imageflow.Net, Version=0.13.1.0, Culture=neutral, PublicKeyToken=null) at Imageflow.Fluent.BufferedStreamSource+d__8.MoveNext (Imageflow.Net, Version=0.13.1.0, Culture=neutral, PublicKeyToken=null) [snip] , Message: Streams cannot exceed 2GB

When running code:

var memorySource = BufferedStreamSource.BorrowEntireStream(sanitizedStream); var info = await ImageJob.GetImageInfoAsync(memorySource, SourceLifetime.Borrowed);

I think this should be validated when creating BufferedStreamSource and more appropriate exception be thrown.

— Reply to this email directly, view it on GitHub https://github.com/imazen/imageflow-dotnet/issues/58, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAA2LH53LOZPZEYNPJTC5FTY4KQR3AVCNFSM6AAAAABF4ZNXQGVHI2DSMVQWIX3LMV43ASLTON2WKOZSGIZTCMZTGM2DENQ . You are receiving this because you are subscribed to this thread.Message ID: @.***>

mpec commented 5 months ago

It is a MemoryStream created by https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpcontent.readasstreamasync?view=net-8.0

lilith commented 3 months ago

Thanks. This should be fixed in the next release, and will "just work" - it is supposed to fall back to using read methods