From 485769cfef1c449db7ef5853571861ae108cef35 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 14 Mar 2019 04:01:10 +0000 Subject: [PATCH] fix some cases where iterator usage does not check hasNext git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1855480 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/ss/util/ImageUtils.java | 43 ++++++++++--------- .../usermodel/section/GeometrySection.java | 2 +- .../poi/hslf/usermodel/HSLFTextParagraph.java | 2 +- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/java/org/apache/poi/ss/util/ImageUtils.java b/src/java/org/apache/poi/ss/util/ImageUtils.java index af54e26df3..9a2b1778c7 100644 --- a/src/java/org/apache/poi/ss/util/ImageUtils.java +++ b/src/java/org/apache/poi/ss/util/ImageUtils.java @@ -59,7 +59,7 @@ public class ImageUtils { * * @return image dimension in pixels */ - public static Dimension getImageDimension(InputStream is, int type){ + public static Dimension getImageDimension(InputStream is, int type) { Dimension size = new Dimension(); switch (type){ @@ -70,28 +70,29 @@ public class ImageUtils { case Workbook.PICTURE_TYPE_DIB: try { //read the image using javax.imageio.* - ImageInputStream iis = ImageIO.createImageInputStream( is ); - try { + try (ImageInputStream iis = ImageIO.createImageInputStream(is)) { Iterator i = ImageIO.getImageReaders( iis ); - ImageReader r = i.next(); - try { - r.setInput( iis ); - 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] = PIXEL_DPI; - if (dpi[1] == 0) dpi[1] = PIXEL_DPI; - - size.width = img.getWidth()*PIXEL_DPI/dpi[0]; - size.height = img.getHeight()*PIXEL_DPI/dpi[1]; - } finally { - r.dispose(); + if (i.hasNext()) { + ImageReader r = i.next(); + try { + r.setInput( iis ); + 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] = PIXEL_DPI; + if (dpi[1] == 0) dpi[1] = PIXEL_DPI; + + size.width = img.getWidth()*PIXEL_DPI/dpi[0]; + size.height = img.getHeight()*PIXEL_DPI/dpi[1]; + } finally { + r.dispose(); + } + } else { + logger.log(POILogger.WARN, "ImageIO found no images"); } - } finally { - iis.close(); } } catch (IOException e) { diff --git a/src/ooxml/java/org/apache/poi/xdgf/usermodel/section/GeometrySection.java b/src/ooxml/java/org/apache/poi/xdgf/usermodel/section/GeometrySection.java index 504a336210..cb212e343b 100644 --- a/src/ooxml/java/org/apache/poi/xdgf/usermodel/section/GeometrySection.java +++ b/src/ooxml/java/org/apache/poi/xdgf/usermodel/section/GeometrySection.java @@ -98,7 +98,7 @@ public class GeometrySection extends XDGFSection { Iterator rows = getCombinedRows().iterator(); // special cases - GeometryRow first = rows.next(); + GeometryRow first = rows.hasNext() ? rows.next() : null; if (first instanceof Ellipse) { return ((Ellipse)first).getPath(); diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java index e6a271da63..49b114512b 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java @@ -1220,7 +1220,7 @@ public final class HSLFTextParagraph implements TextParagraph paraIter = paragraphs.iterator(); - HSLFTextParagraph htp = paraIter.next(); // keep first + HSLFTextParagraph htp = paraIter.hasNext() ? paraIter.next() : null; // keep first assert (htp != null); while (paraIter.hasNext()) { paraIter.next(); -- 2.39.5