diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
index d4b29f49d9..28898bfbd0 100644
--- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs
+++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
@@ -1054,9 +1054,7 @@ namespace SixLabors.ImageSharp.Formats.Png
return true;
}
- int length = this.ReadChunkLength();
-
- if (length == -1)
+ if (!this.TryReadChunkLength(out int length))
{
chunk = default;
@@ -1070,9 +1068,7 @@ namespace SixLabors.ImageSharp.Formats.Png
// That lets us read one byte at a time until we reach a known chunk.
this.currentStream.Position -= 3;
- length = this.ReadChunkLength();
-
- if (length == -1)
+ if (!this.TryReadChunkLength(out length))
{
chunk = default;
@@ -1188,16 +1184,18 @@ namespace SixLabors.ImageSharp.Formats.Png
///
/// Thrown if the input stream is not valid.
///
- private int ReadChunkLength()
+ private bool TryReadChunkLength(out int result)
{
- int numBytes = this.currentStream.Read(this.chunkLengthBuffer, 0, 4);
-
- if (numBytes < 4)
+ if (this.currentStream.Read(this.chunkLengthBuffer, 0, 4) == 4)
{
- return -1;
+ result = BinaryPrimitives.ReadInt32BigEndian(this.chunkLengthBuffer);
+
+ return true;
}
- return BinaryPrimitives.ReadInt32BigEndian(this.chunkLengthBuffer);
+ result = default;
+
+ return false;
}
///