From ad53043dcff6cb14083714f24f82313a83e94702 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Thu, 18 Sep 2008 10:28:24 +0000 Subject: [PATCH] fixed bug #45829: HSSFPicture.getImageDimension() fails when DPI of image is zero git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@696622 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hssf/usermodel/HSSFPicture.java | 6 ++++++ src/testcases/org/apache/poi/hssf/data/45829.png | Bin 0 -> 259 bytes .../poi/hssf/usermodel/TestHSSFPicture.java | 14 ++++++++++++++ 3 files changed, 20 insertions(+) create mode 100755 src/testcases/org/apache/poi/hssf/data/45829.png diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java index 1afb30f5a..8d2dd7964 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java @@ -235,6 +235,12 @@ public class HSSFPicture BufferedImage img = r.read(0); int[] dpi = getResolution(r); + + //if DPI is zero then assume standard 96 DPI + //since cannot divide by zero + if (dpi[0] == 0) dpi[0] = 96; + if (dpi[1] == 0) dpi[1] = 96; + size.width = img.getWidth()*96/dpi[0]; size.height = img.getHeight()*96/dpi[1]; diff --git a/src/testcases/org/apache/poi/hssf/data/45829.png b/src/testcases/org/apache/poi/hssf/data/45829.png new file mode 100755 index 0000000000000000000000000000000000000000..eccaf30b266f739dd18eceb5e045fa9d47e37d70 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#XuSi7+lce zSn}G}QBB2uewU{d%N^g?t#>+T^EIgkowJqm&MeGWI@>|EE$El`i$y(ohqmS3m6YI3 z*s<>Q^`dts41!J^ihGtYb`%+$l~_FG6<723d9kv`1B<;n_j+B6&VG4pO3)d>SSg1d z!($P1_BmuO3v{=+5OUgbd%eN22eC`1JlXgD$8x)QRuLZpFN-LHyyEHV=d#Wzp$P!+ CA82C$ literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java index 87578ae01..d1a6719e3 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java @@ -47,4 +47,18 @@ public final class TestHSSFPicture extends TestCase{ assertEquals(848, anchor1.getDx2()); assertEquals(240, anchor1.getDy2()); } + + /** + * Bug # 45829 reported ArithmeticException (/ by zero) when resizing png with zero DPI. + */ + public void test45829() { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sh1 = wb.createSheet(); + HSSFPatriarch p1 = sh1.createDrawingPatriarch(); + + byte[] pictureData = HSSFTestDataSamples.getTestDataFileContent("45829.png"); + int idx1 = wb.addPicture( pictureData, HSSFWorkbook.PICTURE_TYPE_PNG ); + HSSFPicture pic = p1.createPicture(new HSSFClientAnchor(), idx1); + pic.resize(); + } }