Skip to content

Commit

Permalink
Don't resize inputs with zero width or height
Browse files Browse the repository at this point in the history
Inputs having zero as both width and height were caught, but either one
alone caused a panic. This adds a test showing the old failing behavior
and adds a check for non-positive width/height. Since Resize doesn't
have an error return value, the behavior in this case is to return the
original image.

Fixes nfnt#52
  • Loading branch information
athomason committed Nov 15, 2016
1 parent 891127d commit 874f89d
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
6 changes: 6 additions & 0 deletions resize.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ var blur = 1.0
// If one of the parameters width or height is set to 0, its size will be calculated so that
// the aspect ratio is that of the originating image.
// The resizing algorithm uses channels for parallel computation.
// If the input image has width or height of 0, it is returned unchanged.
func Resize(width, height uint, img image.Image, interp InterpolationFunction) image.Image {
scaleX, scaleY := calcFactors(width, height, float64(img.Bounds().Dx()), float64(img.Bounds().Dy()))
if width == 0 {
Expand All @@ -92,6 +93,11 @@ func Resize(width, height uint, img image.Image, interp InterpolationFunction) i
return img
}

// Input image has no pixels
if img.Bounds().Dx() <= 0 || img.Bounds().Dy() <= 0 {
return img
}

if interp == NearestNeighbor {
return resizeNearest(width, height, scaleX, scaleY, img, interp)
}
Expand Down
14 changes: 14 additions & 0 deletions resize_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@ func Test_ZeroImg(t *testing.T) {
}
}

func Test_HalfZeroImg(t *testing.T) {
zeroImg := image.NewGray16(image.Rect(0, 0, 0, 100))

m := Resize(0, 1, zeroImg, NearestNeighbor)
if m.Bounds() != zeroImg.Bounds() {
t.Fail()
}

m = Resize(1, 0, zeroImg, NearestNeighbor)
if m.Bounds() != zeroImg.Bounds() {
t.Fail()
}
}

func Test_CorrectResize(t *testing.T) {
zeroImg := image.NewGray16(image.Rect(0, 0, 256, 256))

Expand Down

0 comments on commit 874f89d

Please sign in to comment.