diff --git a/src/ImageSharp/Formats/Pbm/BufferedReadStreamExtensions.cs b/src/ImageSharp/Formats/Pbm/BufferedReadStreamExtensions.cs index 581d3e592b..a1d61882f3 100644 --- a/src/ImageSharp/Formats/Pbm/BufferedReadStreamExtensions.cs +++ b/src/ImageSharp/Formats/Pbm/BufferedReadStreamExtensions.cs @@ -29,7 +29,7 @@ public static void SkipWhitespaceAndComments(this BufferedReadStream stream) { innerValue = stream.ReadByte(); } - while (innerValue != 0x0a); + while (innerValue is not 0x0a and not -0x1); // Continue searching for whitespace. val = innerValue; diff --git a/tests/ImageSharp.Tests/Formats/Pbm/PbmMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Pbm/PbmMetadataTests.cs index 7915d224a9..37052dbaf3 100644 --- a/tests/ImageSharp.Tests/Formats/Pbm/PbmMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Pbm/PbmMetadataTests.cs @@ -1,7 +1,9 @@ // Copyright (c) Six Labors. // Licensed under the Apache License, Version 2.0. +using System; using System.IO; +using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Formats.Pbm; using Xunit; @@ -82,5 +84,15 @@ public void Identify_DetectsCorrectComponentType(string imagePath, PbmComponentT Assert.NotNull(bitmapMetadata); Assert.Equal(expectedComponentType, bitmapMetadata.ComponentType); } + + [Fact] + public void Identify_HandlesCraftedDenialOfServiceString() + { + byte[] bytes = Convert.FromBase64String("UDEjWAAACQAAAAA="); + IImageInfo info = Image.Identify(bytes); + Assert.Equal(default, info.Size()); + IImageFormat format = Configuration.Default.ImageFormatsManager.FindFormatByFileExtension("pbm"); + Assert.Equal("PBM", format.Name); + } } }