Browse Source

Gaurd agaisnt null data when adding a new ImageFrame from data

pull/523/head
Jason Nelson 8 years ago
parent
commit
70abc75bbf
  1. 2
      src/ImageSharp/ImageFrameCollection.cs
  2. 20
      tests/ImageSharp.Tests/Image/ImageFramesCollectionTests.cs

2
src/ImageSharp/ImageFrameCollection.cs

@ -77,6 +77,8 @@ namespace SixLabors.ImageSharp
/// <inheritdoc/> /// <inheritdoc/>
public ImageFrame<TPixel> AddFrame(TPixel[] data) public ImageFrame<TPixel> AddFrame(TPixel[] data)
{ {
Guard.NotNull(data, nameof(data));
var frame = ImageFrame.LoadPixelData( var frame = ImageFrame.LoadPixelData(
this.parent.GetMemoryManager(), this.parent.GetMemoryManager(),
new Span<TPixel>(data), new Span<TPixel>(data),

20
tests/ImageSharp.Tests/Image/ImageFramesCollectionTests.cs

@ -39,7 +39,6 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void AddNewFrame_Frame_FramesNotBeNull() public void AddNewFrame_Frame_FramesNotBeNull()
{ {
ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() => ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() =>
{ {
this.collection.AddFrame((ImageFrame<Rgba32>)null); this.collection.AddFrame((ImageFrame<Rgba32>)null);
@ -49,12 +48,13 @@ namespace SixLabors.ImageSharp.Tests
} }
[Fact] [Fact]
public void AddNewFrame_PixelBuffer_FramesNotBeNull() public void AddNewFrame_PixelBuffer_DataMustNotBeNull()
{ {
Rgba32[] data = null;
ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() => ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() =>
{ {
this.collection.AddFrame((Rgba32[])null); this.collection.AddFrame(data);
}); });
Assert.StartsWith("Value cannot be null.", ex.Message); Assert.StartsWith("Value cannot be null.", ex.Message);
@ -63,7 +63,6 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void AddNewFrame_PixelBuffer_BufferIncorrectSize() public void AddNewFrame_PixelBuffer_BufferIncorrectSize()
{ {
ArgumentOutOfRangeException ex = Assert.Throws<ArgumentOutOfRangeException>(() => ArgumentOutOfRangeException ex = Assert.Throws<ArgumentOutOfRangeException>(() =>
{ {
this.collection.AddFrame(new Rgba32[0]); this.collection.AddFrame(new Rgba32[0]);
@ -75,7 +74,6 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void InsertNewFrame_FramesMustHaveSameSize() public void InsertNewFrame_FramesMustHaveSameSize()
{ {
ArgumentException ex = Assert.Throws<ArgumentException>(() => ArgumentException ex = Assert.Throws<ArgumentException>(() =>
{ {
this.collection.InsertFrame(1, new ImageFrame<Rgba32>(Configuration.Default.MemoryManager, 1, 1)); this.collection.InsertFrame(1, new ImageFrame<Rgba32>(Configuration.Default.MemoryManager, 1, 1));
@ -87,7 +85,6 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void InsertNewFrame_FramesNotBeNull() public void InsertNewFrame_FramesNotBeNull()
{ {
ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() => ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() =>
{ {
this.collection.InsertFrame(1, null); this.collection.InsertFrame(1, null);
@ -99,7 +96,6 @@ namespace SixLabors.ImageSharp.Tests
[Fact] [Fact]
public void Constructor_FramesMustHaveSameSize() public void Constructor_FramesMustHaveSameSize()
{ {
ArgumentException ex = Assert.Throws<ArgumentException>(() => ArgumentException ex = Assert.Throws<ArgumentException>(() =>
{ {
var collection = new ImageFrameCollection<Rgba32>(this.image, new[] { var collection = new ImageFrameCollection<Rgba32>(this.image, new[] {
@ -198,7 +194,7 @@ namespace SixLabors.ImageSharp.Tests
{ {
using (Image<TPixel> img = provider.GetImage()) using (Image<TPixel> img = provider.GetImage())
{ {
img.Frames.AddFrame(new ImageFrame<TPixel>(Configuration.Default.MemoryManager,10, 10));// add a frame anyway img.Frames.AddFrame(new ImageFrame<TPixel>(Configuration.Default.MemoryManager, 10, 10));// add a frame anyway
using (Image<TPixel> cloned = img.Frames.CloneFrame(0)) using (Image<TPixel> cloned = img.Frames.CloneFrame(0))
{ {
Assert.Equal(2, img.Frames.Count); Assert.Equal(2, img.Frames.Count);
@ -216,7 +212,7 @@ namespace SixLabors.ImageSharp.Tests
{ {
var sourcePixelData = img.GetPixelSpan().ToArray(); var sourcePixelData = img.GetPixelSpan().ToArray();
img.Frames.AddFrame(new ImageFrame<TPixel>(Configuration.Default.MemoryManager,10, 10)); img.Frames.AddFrame(new ImageFrame<TPixel>(Configuration.Default.MemoryManager, 10, 10));
using (Image<TPixel> cloned = img.Frames.ExportFrame(0)) using (Image<TPixel> cloned = img.Frames.ExportFrame(0))
{ {
Assert.Equal(1, img.Frames.Count); Assert.Equal(1, img.Frames.Count);
@ -244,7 +240,7 @@ namespace SixLabors.ImageSharp.Tests
public void AddFrame_clones_sourceFrame() public void AddFrame_clones_sourceFrame()
{ {
var pixelData = this.image.Frames.RootFrame.GetPixelSpan().ToArray(); var pixelData = this.image.Frames.RootFrame.GetPixelSpan().ToArray();
var otherFRame = new ImageFrame<Rgba32>(Configuration.Default.MemoryManager,10, 10); var otherFRame = new ImageFrame<Rgba32>(Configuration.Default.MemoryManager, 10, 10);
var addedFrame = this.image.Frames.AddFrame(otherFRame); var addedFrame = this.image.Frames.AddFrame(otherFRame);
addedFrame.ComparePixelBufferTo(otherFRame.GetPixelSpan()); addedFrame.ComparePixelBufferTo(otherFRame.GetPixelSpan());
Assert.NotEqual(otherFRame, addedFrame); Assert.NotEqual(otherFRame, addedFrame);
@ -254,7 +250,7 @@ namespace SixLabors.ImageSharp.Tests
public void InsertFrame_clones_sourceFrame() public void InsertFrame_clones_sourceFrame()
{ {
var pixelData = this.image.Frames.RootFrame.GetPixelSpan().ToArray(); var pixelData = this.image.Frames.RootFrame.GetPixelSpan().ToArray();
var otherFRame = new ImageFrame<Rgba32>(Configuration.Default.MemoryManager,10, 10); var otherFRame = new ImageFrame<Rgba32>(Configuration.Default.MemoryManager, 10, 10);
var addedFrame = this.image.Frames.InsertFrame(0, otherFRame); var addedFrame = this.image.Frames.InsertFrame(0, otherFRame);
addedFrame.ComparePixelBufferTo(otherFRame.GetPixelSpan()); addedFrame.ComparePixelBufferTo(otherFRame.GetPixelSpan());
Assert.NotEqual(otherFRame, addedFrame); Assert.NotEqual(otherFRame, addedFrame);
@ -308,7 +304,7 @@ namespace SixLabors.ImageSharp.Tests
this.image.Frames.CreateFrame(); this.image.Frames.CreateFrame();
} }
var frame = new ImageFrame<Rgba32>(Configuration.Default.MemoryManager,10, 10); var frame = new ImageFrame<Rgba32>(Configuration.Default.MemoryManager, 10, 10);
Assert.False(this.image.Frames.Contains(frame)); Assert.False(this.image.Frames.Contains(frame));
} }

Loading…
Cancel
Save