Skip to content

Image.Load throws an ArgumentException when loading PNG #849

Closed

Description

@casperOne

Prerequisites

  • I have written a descriptive issue title
  • I have verified that I am running the latest version of ImageSharp
  • I have verified if the problem exist in both DEBUG and RELEASE mode
  • I have searched open and closed issues to ensure it has not already been reported

Description

Loading the following PNG (from a Stream or ReadOnlyMemory<byte> instance) throws an ArgumentException.

https://user-images.githubusercontent.com/561862/54476020-e3ab4c00-47ce-11e9-9cb1-2542507bf23c.png

Which has the following message:

Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.

Notes:

  • The image renders in Chrome correctly
  • According to http://www.libpng.org/pub/png/apps/pngcheck.html, there are no problems with image integrity
  • There are three IDAT sections in the PNG (this shouldn't make a difference, from what I can tell in my reading of the spec)
  • The images are produced out of FFMPEG, but other PNG images output from the same process/video are able to be loaded

Steps to Reproduce

Use the above image in a FileStream (or any Stream representation).

Load the image (this can be copied/pasted into a .NET Core 2.2 console app and the ImageSharp libraries referenced):

static async Task Main()
{
    try
    {
        // Use http client.
        var client = new HttpClient();

        // Make the request.
        using (Stream stream = await client.GetStreamAsync(
                "https://user-images.githubusercontent.com/561862/54476020-e3ab4c00-47ce-11e9-9cb1-2542507bf23c.png")
            .ConfigureAwait(false))
        {
            Image<Rgba32> image = Image.Load<Rgba32>(stream, new PngDecoder());
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        throw;
    }
}

System Configuration

  • ImageSharp version: 1.0.0-beta0006
  • Other ImageSharp packages and versions: None
  • Environment (Operating system, version and so on): Windows 10
  • .NET Framework version: .NET Core 2.2
  • Additional information:

Activity

  1. clintonrocksmith commented on Mar 19, 2019

    @clintonrocksmith

    Hi there,

    I did find this as an issue but had to set the decoder explicitly to being a png otherwise it failed. This was in a .NET Core solution as well whereby I loaded via a stream from Blob Storage in Azure, just giving more information to help.

  2. casperOne commented on Mar 19, 2019

    @casperOne
    Author

    @clintonrocksmith Thanks for the reply, much appreciated.

    That said, I didn't have any luck setting the decoder explicitly. Using HttpClient to download the link above, I still get the same error using this:

    static async Task Main()
    {
        try
        {
            // Use http client.
            var client = new HttpClient();
    
            // Make the request.
            using (Stream stream = await client.GetStreamAsync(
                    "https://user-images.githubusercontent.com/561862/54476020-e3ab4c00-47ce-11e9-9cb1-2542507bf23c.png")
                .ConfigureAwait(false))
            {
                Image<Rgba32> image = Image.Load<Rgba32>(stream, new PngDecoder());
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
    }
    

    May I ask how you were able to get it to load?

  3. JimBobSquarePants commented on Mar 21, 2019

    @JimBobSquarePants
    Member

    @casperOne @clintonrocksmith The two issues are not related. There’s something about that png that causes our current decoder to fail. I fixed the issue locally today though.

    The other issue sounds like it was due to the input stream being in the wrong position for us to identify the decoder.

  4. casperOne commented on Mar 21, 2019

    @casperOne
    Author

    @JimBobSquarePants Thanks for the follow-up. I'll keep an eye on this to be closed when a PR gets merged. Looking forward to the next push to Nuget for the fix.

    Thanks!

  5. added this to the 1.0.0-rc1 milestone on Mar 21, 2019
  6. added a commit that references this issue on Mar 21, 2019
    1d99782
  7. JimBobSquarePants commented on Mar 22, 2019

    @JimBobSquarePants
    Member

    @casperOne Don't forget we have rock solid development releases on Myget

    https://github.com/SixLabors/ImageSharp#installation

  8. casperOne commented on Mar 24, 2019

    @casperOne
    Author

    @JimBobSquarePants Thanks for addressing this, I've confirmed this works, and have used the MyGet repository.

  9. added a commit that references this issue on Nov 11, 2019
    4ef30ce
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions