Browse Source

Merge pull request #964 from 101100/fix-indexoutofrangeexception-in-fillregionprocessor

Fix IndexOutOfRangeException in FillRegionProcessor
af/merge-core
Scott Williams 7 years ago
committed by GitHub
parent
commit
e2434941da
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/ImageSharp.Drawing/Processing/Processors/Drawing/FillRegionProcessor{TPixel}.cs
  2. 45
      tests/ImageSharp.Tests/Drawing/FillRegionProcessorTests.cs

2
src/ImageSharp.Drawing/Processing/Processors/Drawing/FillRegionProcessor{TPixel}.cs

@ -105,7 +105,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Drawing
QuickSort.Sort(buffer.Slice(0, pointsFound));
for (int point = 0; point < pointsFound; point += 2)
for (int point = 0; point < pointsFound && point < buffer.Length - 1; point += 2)
{
// points will be paired up
float scanStart = buffer[point] - minX;

45
tests/ImageSharp.Tests/Drawing/FillRegionProcessorTests.cs

@ -12,6 +12,7 @@ using SixLabors.ImageSharp.Processing.Processors;
using SixLabors.Primitives;
using Xunit;
using SixLabors.ImageSharp.Processing.Processors.Drawing;
using SixLabors.Shapes;
namespace SixLabors.ImageSharp.Tests.Drawing
{
@ -68,6 +69,50 @@ namespace SixLabors.ImageSharp.Tests.Drawing
}
}
[Fact]
public void DoesNotThrowForIssue928()
{
var rectText = new RectangleF(0, 0, 2000, 2000);
using (Image<Rgba32> img = new Image<Rgba32>((int)rectText.Width, (int)rectText.Height))
{
img.Mutate(x => x.Fill(Rgba32.Transparent));
img.Mutate(ctx => {
ctx.DrawLines(
Rgba32.Red,
0.984252f,
new PointF(104.762581f, 1074.99365f),
new PointF(104.758667f, 1075.01721f),
new PointF(104.757675f, 1075.04114f),
new PointF(104.759628f, 1075.065f),
new PointF(104.764488f, 1075.08838f),
new PointF(104.772186f, 1075.111f),
new PointF(104.782608f, 1075.13245f),
new PointF(104.782608f, 1075.13245f)
);
}
);
}
}
[Fact]
public void DoesNotThrowFillingTriangle()
{
using(var image = new Image<Rgba32>(28, 28))
{
var path = new Polygon(
new LinearLineSegment(new PointF(17.11f, 13.99659f), new PointF(14.01433f, 27.06201f)),
new LinearLineSegment(new PointF(14.01433f, 27.06201f), new PointF(13.79267f, 14.00023f)),
new LinearLineSegment(new PointF(13.79267f, 14.00023f), new PointF(17.11f, 13.99659f))
);
image.Mutate(ctx =>
{
ctx.Fill(Rgba32.White, path);
});
}
}
// Mocking the region throws an error in netcore2.0
private class MockRegion1 : Region
{

Loading…
Cancel
Save