From 04a4c6e3ae115cf670c8df4abfb314c1e85e93a7 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 16 Dec 2015 10:18:26 +0100 Subject: [PATCH] #195: Fixed AIOOBE related to specific widths --- .../java/com/twelvemonkeys/image/ResampleOp.java | 4 ++-- .../twelvemonkeys/image/ResampleOpTestCase.java | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java b/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java index 1929a77b..73cc9ccb 100644 --- a/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java +++ b/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java @@ -1336,7 +1336,7 @@ public class ResampleOp implements BufferedImageOp/* TODO: RasterOp */ { } //contribX.n = 0; - contribX.p = new Contributor[(int) (width * 2.0 + 1.0)]; + contribX.p = new Contributor[(int) (width * 2.0 + 1.0 + 0.5)]; center = (double) i / xscale; int left = (int) Math.ceil(center - width);// Note: Assumes width <= .5 @@ -1387,7 +1387,7 @@ public class ResampleOp implements BufferedImageOp/* TODO: RasterOp */ { else { /* Expanding image */ //contribX.n = 0; - contribX.p = new Contributor[(int) (fwidth * 2.0 + 1.0)]; + contribX.p = new Contributor[(int) (fwidth * 2.0 + 1.0 + 0.5)]; center = (double) i / xscale; int left = (int) Math.ceil(center - fwidth); diff --git a/common/common-image/src/test/java/com/twelvemonkeys/image/ResampleOpTestCase.java b/common/common-image/src/test/java/com/twelvemonkeys/image/ResampleOpTestCase.java index d57ac006..1d9745dd 100644 --- a/common/common-image/src/test/java/com/twelvemonkeys/image/ResampleOpTestCase.java +++ b/common/common-image/src/test/java/com/twelvemonkeys/image/ResampleOpTestCase.java @@ -306,7 +306,7 @@ public class ResampleOpTestCase { // https://github.com/haraldk/TwelveMonkeys/issues/195 @Test - public void testAIOOBE() { + public void testAIOOBEHeight() { BufferedImage myImage = new BufferedImage(100, 354, BufferedImage.TYPE_INT_ARGB); for (int i = 19; i > 0; i--) { @@ -316,6 +316,18 @@ public class ResampleOpTestCase { } } + // https://github.com/haraldk/TwelveMonkeys/issues/195 + @Test + public void testAIOOBEWidth() { + BufferedImage myImage = new BufferedImage(2832, 2832, BufferedImage.TYPE_INT_ARGB); + + for (int i = 145; i > 143; i--) { + ResampleOp resampler = new ResampleOp(144, i, ResampleOp.FILTER_LANCZOS); + BufferedImage resizedImage = resampler.filter(myImage, null); + assertNotNull(resizedImage); + } + } + @Ignore("Not for general unit testing") @Test public void testTime() {