diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveThresholdInputStream.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveThresholdInputStream.java index 68c813dbbb..fe6c77150b 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveThresholdInputStream.java +++ b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveThresholdInputStream.java @@ -123,8 +123,8 @@ public class ZipArchiveThresholdInputStream extends FilterInputStream { final String entryName = entry == null ? "not set" : entry.getName(); // check the file size first, in case we are working on uncompressed streams - if (payloadSize > MAX_ENTRY_SIZE) { - throw new IOException(String.format(Locale.ROOT, MAX_ENTRY_SIZE_MSG, payloadSize, rawSize, MAX_ENTRY_SIZE, entryName)); + if (payloadSize > getMaxEntrySize()) { + throw new IOException(String.format(Locale.ROOT, MAX_ENTRY_SIZE_MSG, payloadSize, rawSize, getMaxEntrySize(), entryName)); } // don't alert for small expanded size diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/binary/XSSFBParser.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/binary/XSSFBParser.java index 8822053180..c56f8ac713 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/binary/XSSFBParser.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/binary/XSSFBParser.java @@ -107,7 +107,7 @@ public abstract class XSSFBParser { } if (records == null || records.get(recordId)) { - byte[] buff = IOUtils.safelyAllocate(recordLength, MAX_RECORD_LENGTH); + byte[] buff = IOUtils.safelyAllocate(recordLength, getMaxRecordLength()); is.readFully(buff); handleRecord(recordId, buff); } else { diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/PointerContainingStream.java b/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/PointerContainingStream.java index 69964427fa..387cb8580d 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/PointerContainingStream.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/PointerContainingStream.java @@ -17,8 +17,6 @@ package org.apache.poi.hdgf.streams; -import org.apache.logging.log4j.Logger; -import org.apache.poi.logging.PoiLogManager; import org.apache.poi.hdgf.chunks.ChunkFactory; import org.apache.poi.hdgf.pointers.Pointer; import org.apache.poi.hdgf.pointers.PointerFactory; @@ -28,8 +26,6 @@ import org.apache.poi.hdgf.pointers.PointerFactory; * other data too. */ public class PointerContainingStream extends Stream { // TODO - instantiable superclass - private static final Logger LOG = PoiLogManager.getLogger(PointerContainingStream.class); - private static int MAX_CHILDREN_NESTING = 500; private final Pointer[] childPointers; @@ -68,9 +64,9 @@ public class PointerContainingStream extends Stream { // TODO - instantiable sup } private void findChildren(byte[] documentData, int nesting) { - if (nesting > MAX_CHILDREN_NESTING) { + if (nesting > getMaxChildrenNesting()) { throw new IllegalArgumentException("Encountered too deep nesting, cannot process stream " + - "with more than " + MAX_CHILDREN_NESTING + " nested children. " + + "with more than " + getMaxChildrenNesting() + " nested children. " + "Some data could not be parsed. You can call setMaxChildrenNesting() to adjust " + "this limit."); } diff --git a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index 0fea271340..6c7bb93a2b 100644 --- a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -234,7 +234,8 @@ public final class HSSFWorkbook extends POIDocument implements Workbook { * @return the max image length allowed for HSSFWorkbook */ public static int getMaxImageLength() { - return MAX_IMAGE_LENGTH; + final int ioMaxSize = IOUtils.getByteArrayMaxOverride(); + return ioMaxSize < 0 ? MAX_IMAGE_LENGTH : Math.min(MAX_IMAGE_LENGTH, ioMaxSize); } /** @@ -1978,7 +1979,7 @@ public final class HSSFWorkbook extends POIDocument implements Workbook { case PICTURE_TYPE_WMF: // remove first 22 bytes if file starts with the WMF placeable header if (FileMagic.valueOf(pictureData) == FileMagic.WMF) { - pictureData = IOUtils.safelyClone(pictureData, 22, pictureData.length - 22, MAX_IMAGE_LENGTH); + pictureData = IOUtils.safelyClone(pictureData, 22, pictureData.length - 22, getMaxImageLength()); } // fall through case PICTURE_TYPE_EMF: diff --git a/poi/src/main/java/org/apache/poi/ss/formula/function/FunctionMetadataReader.java b/poi/src/main/java/org/apache/poi/ss/formula/function/FunctionMetadataReader.java index b03c732e89..349e62f044 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/function/FunctionMetadataReader.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/function/FunctionMetadataReader.java @@ -155,7 +155,7 @@ final class FunctionMetadataReader { // (all unspecified params are assumed to be the same as the last) nItems --; } - byte[] result = IOUtils.safelyAllocate(nItems, MAX_RECORD_LENGTH); + byte[] result = IOUtils.safelyAllocate(nItems, getMaxRecordLength()); for (int i = 0; i < nItems; i++) { result[i] = parseOperandTypeCode(array[i]); }