From 60f0c0a7f5d284c908a3e7e6051ecde3e10c1872 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 19 Feb 2022 21:14:05 +0000 Subject: [PATCH] add extra max size config git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898235 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xslf/usermodel/XMLSlideShow.java | 18 +---------------- .../poi/xslf/usermodel/XSLFPictureData.java | 20 ++++++++++++++++++- .../poi/xssf/usermodel/XSSFPictureData.java | 19 +++++++++++++++++- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index fbc9668203..72418a546f 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@ -77,8 +77,6 @@ public class XMLSlideShow extends POIXMLDocument //arbitrarily selected; may need to increase private static final int DEFAULT_MAX_RECORD_LENGTH = 1_000_000; private static int MAX_RECORD_LENGTH = DEFAULT_MAX_RECORD_LENGTH; - private static final int DEFAULT_MAX_IMAGE_SIZE = 100_000_000; - private static int MAX_IMAGE_SIZE = DEFAULT_MAX_IMAGE_SIZE; private CTPresentation _presentation; private final List _slides = new ArrayList<>(); @@ -103,20 +101,6 @@ public class XMLSlideShow extends POIXMLDocument return MAX_RECORD_LENGTH; } - /** - * @param length the max image size allowed for XMLSlideShow - */ - public static void setMaxImageSize(int length) { - MAX_IMAGE_SIZE = length; - } - - /** - * @return the max image size allowed for XMLSlideShow - */ - public static int getMaxImageSize() { - return MAX_IMAGE_SIZE; - } - public XMLSlideShow() { this(empty()); } @@ -572,7 +556,7 @@ public class XMLSlideShow extends POIXMLDocument */ @Override public XSLFPictureData addPicture(InputStream is, PictureType format) throws IOException { - return addPicture(IOUtils.toByteArray(is, getMaxImageSize()), format); + return addPicture(IOUtils.toByteArray(is, XSLFPictureData.getMaxImageSize()), format); } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java index 2f580eebe7..e9cefc20bc 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java @@ -43,6 +43,24 @@ import org.apache.poi.util.Units; */ @Beta public final class XSLFPictureData extends POIXMLDocumentPart implements PictureData { + + private static final int DEFAULT_MAX_IMAGE_SIZE = 100_000_000; + private static int MAX_IMAGE_SIZE = DEFAULT_MAX_IMAGE_SIZE; + + /** + * @param length the max image size allowed for XSLF pictures + */ + public static void setMaxImageSize(int length) { + MAX_IMAGE_SIZE = length; + } + + /** + * @return the max image size allowed for XSLF pictures + */ + public static int getMaxImageSize() { + return MAX_IMAGE_SIZE; + } + private Long checksum; // original image dimensions (for formats supported by BufferedImage) @@ -86,7 +104,7 @@ public final class XSLFPictureData extends POIXMLDocumentPart implements Picture */ public byte[] getData() { try (InputStream stream = getInputStream()) { - return IOUtils.toByteArray(stream); + return IOUtils.toByteArray(stream, getMaxImageSize()); } catch (IOException e) { throw new POIXMLException(e); } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java index 0fa78c9f31..4dc8ca78a7 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java @@ -34,6 +34,23 @@ import org.apache.poi.util.IOUtils; */ public class XSSFPictureData extends POIXMLDocumentPart implements PictureData { + private static final int DEFAULT_MAX_IMAGE_SIZE = 100_000_000; + private static int MAX_IMAGE_SIZE = DEFAULT_MAX_IMAGE_SIZE; + + /** + * @param length the max image size allowed for XSSF pictures + */ + public static void setMaxImageSize(int length) { + MAX_IMAGE_SIZE = length; + } + + /** + * @return the max image size allowed for XSSF pictures + */ + public static int getMaxImageSize() { + return MAX_IMAGE_SIZE; + } + /** * Relationships for each known picture type */ @@ -88,7 +105,7 @@ public class XSSFPictureData extends POIXMLDocumentPart implements PictureData { */ public byte[] getData() { try (InputStream inputStream = getPackagePart().getInputStream()) { - return IOUtils.toByteArray(inputStream); + return IOUtils.toByteArray(inputStream, getMaxImageSize()); } catch(IOException e) { throw new POIXMLException(e); } -- 2.39.5