From 8644c69b4cd01b27992c78046a1dff406ee2861d Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 23 Oct 2021 21:13:08 +0000 Subject: configurable max record len git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894516 13f79535-47bb-0310-9956-ffa450edef68 --- poi/src/main/java/org/apache/poi/hpsf/Section.java | 4 +--- .../java/org/apache/poi/hpsf/UnicodeString.java | 4 +--- .../java/org/apache/poi/hpsf/VariantSupport.java | 6 ++--- .../poi/hssf/extractor/OldExcelExtractor.java | 20 ++--------------- .../org/apache/poi/hssf/record/CFRule12Record.java | 10 ++++----- .../org/apache/poi/hssf/record/DConRefRecord.java | 6 ++--- .../hssf/record/EmbeddedObjectRefSubRecord.java | 5 ++--- .../poi/hssf/record/GroupMarkerSubRecord.java | 6 ++--- .../apache/poi/hssf/record/HyperlinkRecord.java | 6 ++--- .../org/apache/poi/hssf/record/OldLabelRecord.java | 5 ++--- .../org/apache/poi/hssf/record/OldSheetRecord.java | 6 ++--- .../apache/poi/hssf/record/OldStringRecord.java | 6 ++--- .../apache/poi/hssf/record/RecordInputStream.java | 7 +++--- .../org/apache/poi/hssf/record/common/ExtRst.java | 5 ++--- .../hssf/record/crypto/Biff8DecryptingStream.java | 26 ++++------------------ .../java/org/apache/poi/poifs/dev/POIFSDump.java | 4 +--- .../apache/poi/poifs/filesystem/POIFSDocument.java | 4 ++-- .../poi/poifs/filesystem/POIFSFileSystem.java | 2 +- .../apache/poi/poifs/property/PropertyTable.java | 5 +---- .../org/apache/poi/poifs/storage/HeaderBlock.java | 6 ++--- 20 files changed, 40 insertions(+), 103 deletions(-) (limited to 'poi/src') diff --git a/poi/src/main/java/org/apache/poi/hpsf/Section.java b/poi/src/main/java/org/apache/poi/hpsf/Section.java index 13ae9af603..5636dbd400 100644 --- a/poi/src/main/java/org/apache/poi/hpsf/Section.java +++ b/poi/src/main/java/org/apache/poi/hpsf/Section.java @@ -45,8 +45,6 @@ import org.apache.poi.util.LittleEndianOutputStream; * Represents a section in a {@link PropertySet}. */ public class Section { - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; private static final Logger LOG = LogManager.getLogger(Section.class); @@ -830,7 +828,7 @@ public class Section { } try { - byte[] buf = IOUtils.safelyAllocate(nrBytes, MAX_RECORD_LENGTH); + byte[] buf = IOUtils.safelyAllocate(nrBytes, CodePageString.getMaxRecordLength()); leis.readFully(buf, 0, nrBytes); final String str = CodePageUtil.getStringFromCodePage(buf, 0, nrBytes, cp); diff --git a/poi/src/main/java/org/apache/poi/hpsf/UnicodeString.java b/poi/src/main/java/org/apache/poi/hpsf/UnicodeString.java index 866a2b2acd..e89e47e5a0 100644 --- a/poi/src/main/java/org/apache/poi/hpsf/UnicodeString.java +++ b/poi/src/main/java/org/apache/poi/hpsf/UnicodeString.java @@ -33,15 +33,13 @@ import org.apache.poi.util.StringUtil; @Internal public class UnicodeString { private static final Logger LOG = LogManager.getLogger(UnicodeString.class); - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; private byte[] _value; public void read(LittleEndianByteArrayInputStream lei) { final int length = lei.readInt(); final int unicodeBytes = length*2; - _value = IOUtils.safelyAllocate(unicodeBytes, MAX_RECORD_LENGTH); + _value = IOUtils.safelyAllocate(unicodeBytes, CodePageString.getMaxRecordLength()); // If Length is zero, this field MUST be zero bytes in length. If Length is // nonzero, this field MUST be a null-terminated array of 16-bit Unicode characters, followed by diff --git a/poi/src/main/java/org/apache/poi/hpsf/VariantSupport.java b/poi/src/main/java/org/apache/poi/hpsf/VariantSupport.java index e1720b66b1..1a0cce110c 100644 --- a/poi/src/main/java/org/apache/poi/hpsf/VariantSupport.java +++ b/poi/src/main/java/org/apache/poi/hpsf/VariantSupport.java @@ -59,8 +59,6 @@ public class VariantSupport extends Variant { private static final Logger LOG = LogManager.getLogger(VariantSupport.class); - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; private static boolean logUnsupportedTypes; @@ -176,7 +174,7 @@ public class VariantSupport extends Variant { typedPropertyValue.readValue(lei); } catch ( UnsupportedOperationException exc ) { try { - final byte[] v = IOUtils.toByteArray(lei, length, MAX_RECORD_LENGTH); + final byte[] v = IOUtils.toByteArray(lei, length, CodePageString.getMaxRecordLength()); throw new ReadingNotSupportedException( type, v ); } catch (IOException e) { throw new RuntimeException(e); @@ -254,7 +252,7 @@ public class VariantSupport extends Variant { default: final int unpadded = lei.getReadIndex()-offset; lei.setReadIndex(offset); - final byte[] v = IOUtils.safelyAllocate(unpadded, MAX_RECORD_LENGTH); + final byte[] v = IOUtils.safelyAllocate(unpadded, CodePageString.getMaxRecordLength()); lei.readFully( v, 0, unpadded ); throw new ReadingNotSupportedException( type, v ); } diff --git a/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java b/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java index d50ec09d4d..ac1ca9541c 100644 --- a/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java +++ b/poi/src/main/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java @@ -41,6 +41,7 @@ import org.apache.poi.hssf.record.OldSheetRecord; import org.apache.poi.hssf.record.OldStringRecord; import org.apache.poi.hssf.record.RKRecord; import org.apache.poi.hssf.record.RecordInputStream; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DocumentNode; import org.apache.poi.poifs.filesystem.FileMagic; @@ -62,9 +63,6 @@ import org.apache.poi.util.IOUtils; public class OldExcelExtractor implements POITextExtractor { private static final int FILE_PASS_RECORD_SID = 0x2f; - //arbitrarily selected; may need to increase - private static final int DEFAULT_MAX_RECORD_LENGTH = 100_000; - private static int MAX_RECORD_LENGTH = DEFAULT_MAX_RECORD_LENGTH; private RecordInputStream ris; @@ -74,20 +72,6 @@ public class OldExcelExtractor implements POITextExtractor { private int biffVersion; private int fileType; - /** - * @param length the max record length allowed for OldExcelExtractor - */ - public static void setMaxRecordLength(int length) { - MAX_RECORD_LENGTH = length; - } - - /** - * @return the max record length allowed for OldExcelExtractor - */ - public static int getMaxRecordLength() { - return MAX_RECORD_LENGTH; - } - public OldExcelExtractor(InputStream input) throws IOException { open(input); } @@ -316,7 +300,7 @@ public class OldExcelExtractor implements POITextExtractor { break; default: - ris.readFully(IOUtils.safelyAllocate(ris.remaining(), MAX_RECORD_LENGTH)); + ris.readFully(IOUtils.safelyAllocate(ris.remaining(), HSSFWorkbook.getMaxRecordLength())); } } diff --git a/poi/src/main/java/org/apache/poi/hssf/record/CFRule12Record.java b/poi/src/main/java/org/apache/poi/hssf/record/CFRule12Record.java index fad2fb11a1..4381c52a18 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/CFRule12Record.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/CFRule12Record.java @@ -42,6 +42,7 @@ import org.apache.poi.util.IOUtils; import org.apache.poi.util.LittleEndianOutput; import static org.apache.logging.log4j.util.Unbox.box; +import static org.apache.poi.hssf.usermodel.HSSFWorkbook.getMaxRecordLength; /** * Conditional Formatting v12 Rule Record (0x087A). @@ -55,9 +56,6 @@ import static org.apache.logging.log4j.util.Unbox.box; */ public final class CFRule12Record extends CFRuleBase implements FutureRecord { - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - public static final short sid = 0x087A; private FtrHeader futureHeader; @@ -123,7 +121,7 @@ public final class CFRule12Record extends CFRuleBase implements FutureRecord { priority = 0; template_type = getConditionType(); template_param_length = 16; - template_params = IOUtils.safelyAllocate(template_param_length, MAX_RECORD_LENGTH); + template_params = IOUtils.safelyAllocate(template_param_length, getMaxRecordLength()); } /** @@ -267,7 +265,7 @@ public final class CFRule12Record extends CFRuleBase implements FutureRecord { } else { long len = readFormatOptions(in); if (len < ext_formatting_length) { - ext_formatting_data = IOUtils.safelyAllocate(ext_formatting_length-len, MAX_RECORD_LENGTH); + ext_formatting_data = IOUtils.safelyAllocate(ext_formatting_length-len, getMaxRecordLength()); in.readFully(ext_formatting_data); } } @@ -283,7 +281,7 @@ public final class CFRule12Record extends CFRuleBase implements FutureRecord { template_type = in.readUShort(); template_param_length = in.readByte(); if (template_param_length == 0 || template_param_length == 16) { - template_params = IOUtils.safelyAllocate(template_param_length, MAX_RECORD_LENGTH); + template_params = IOUtils.safelyAllocate(template_param_length, getMaxRecordLength()); in.readFully(template_params); } else { LOG.atWarn().log("CF Rule v12 template params length should be 0 or 16, found {}", box(template_param_length)); diff --git a/poi/src/main/java/org/apache/poi/hssf/record/DConRefRecord.java b/poi/src/main/java/org/apache/poi/hssf/record/DConRefRecord.java index 98d3112e2d..2ef4f34cfb 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/DConRefRecord.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/DConRefRecord.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.function.Supplier; import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.IOUtils; import org.apache.poi.util.LittleEndianOutput; @@ -72,9 +73,6 @@ import org.apache.poi.util.StringUtil; */ public class DConRefRecord extends StandardRecord { - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - /** * The id of the record type, * sid = {@value} @@ -158,7 +156,7 @@ public class DConRefRecord extends StandardRecord { // single-byte, 1 if double-byte. final int byteLength = charCount * (charType + 1); - path = IOUtils.safelyAllocate(byteLength, MAX_RECORD_LENGTH); + path = IOUtils.safelyAllocate(byteLength, HSSFWorkbook.getMaxRecordLength()); inStream.readFully(path); // If it's a self reference, the last one or two bytes (depending on char type) are the diff --git a/poi/src/main/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java b/poi/src/main/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java index dab3a2f4b9..07e801175b 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java @@ -24,6 +24,7 @@ import java.util.function.Supplier; import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.formula.ptg.Area3DPtg; import org.apache.poi.ss.formula.ptg.AreaPtg; import org.apache.poi.ss.formula.ptg.Ptg; @@ -47,8 +48,6 @@ import static org.apache.logging.log4j.util.Unbox.box; */ public final class EmbeddedObjectRefSubRecord extends SubRecord { private static final Logger LOG = LogManager.getLogger(EmbeddedObjectRefSubRecord.class); - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; public static final short sid = 0x0009; @@ -202,7 +201,7 @@ public final class EmbeddedObjectRefSubRecord extends SubRecord { if (size == 0) { return EMPTY_BYTE_ARRAY; } - byte[] result = IOUtils.safelyAllocate(size, MAX_RECORD_LENGTH); + byte[] result = IOUtils.safelyAllocate(size, HSSFWorkbook.getMaxRecordLength()); in.readFully(result); return result; } diff --git a/poi/src/main/java/org/apache/poi/hssf/record/GroupMarkerSubRecord.java b/poi/src/main/java/org/apache/poi/hssf/record/GroupMarkerSubRecord.java index dcbf4ee7d8..64c751a22d 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/GroupMarkerSubRecord.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/GroupMarkerSubRecord.java @@ -20,6 +20,7 @@ package org.apache.poi.hssf.record; import java.util.Map; import java.util.function.Supplier; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.IOUtils; import org.apache.poi.util.LittleEndianInput; @@ -31,9 +32,6 @@ import org.apache.poi.util.LittleEndianOutput; */ public final class GroupMarkerSubRecord extends SubRecord { public static final short sid = 0x0006; - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - private static final byte[] EMPTY_BYTE_ARRAY = { }; @@ -54,7 +52,7 @@ public final class GroupMarkerSubRecord extends SubRecord { } GroupMarkerSubRecord(LittleEndianInput in, int size, int cmoOt) { - byte[] buf = IOUtils.safelyAllocate(size, MAX_RECORD_LENGTH); + byte[] buf = IOUtils.safelyAllocate(size, HSSFWorkbook.getMaxRecordLength()); in.readFully(buf); reserved = buf; } diff --git a/poi/src/main/java/org/apache/poi/hssf/record/HyperlinkRecord.java b/poi/src/main/java/org/apache/poi/hssf/record/HyperlinkRecord.java index 78bda25262..c6acf98336 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/HyperlinkRecord.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/HyperlinkRecord.java @@ -31,6 +31,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.poi.hpsf.ClassID; import org.apache.poi.hpsf.ClassIDPredefined; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.HexRead; @@ -48,9 +49,6 @@ import org.apache.poi.util.StringUtil; public final class HyperlinkRecord extends StandardRecord { public static final short sid = 0x01B8; private static final Logger LOG = LogManager.getLogger(HyperlinkRecord.class); - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - /* * Link flags @@ -391,7 +389,7 @@ public final class HyperlinkRecord extends StandardRecord { int len = in.readInt(); - byte[] path_bytes = IOUtils.safelyAllocate(len, MAX_RECORD_LENGTH); + byte[] path_bytes = IOUtils.safelyAllocate(len, HSSFWorkbook.getMaxRecordLength()); in.readFully(path_bytes); _address = new String(path_bytes, StringUtil.UTF8); diff --git a/poi/src/main/java/org/apache/poi/hssf/record/OldLabelRecord.java b/poi/src/main/java/org/apache/poi/hssf/record/OldLabelRecord.java index e393c8e3d8..2ac572c981 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/OldLabelRecord.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/OldLabelRecord.java @@ -22,6 +22,7 @@ import java.util.function.Supplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.IOUtils; import org.apache.poi.util.RecordFormatException; @@ -36,8 +37,6 @@ import static org.apache.poi.util.HexDump.toHex; */ public final class OldLabelRecord extends OldCellRecord { private static final Logger LOG = LogManager.getLogger(OldLabelRecord.class); - //arbitrarily set, may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; public static final short biff2_sid = 0x0004; public static final short biff345_sid = 0x0204; @@ -60,7 +59,7 @@ public final class OldLabelRecord extends OldCellRecord { } // Can only decode properly later when you know the codepage - field_5_bytes = IOUtils.safelyAllocate(field_4_string_len, MAX_RECORD_LENGTH); + field_5_bytes = IOUtils.safelyAllocate(field_4_string_len, HSSFWorkbook.getMaxRecordLength()); in.read(field_5_bytes, 0, field_4_string_len); if (in.remaining() > 0) { diff --git a/poi/src/main/java/org/apache/poi/hssf/record/OldSheetRecord.java b/poi/src/main/java/org/apache/poi/hssf/record/OldSheetRecord.java index 9f2120c393..24f67bf8b9 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/OldSheetRecord.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/OldSheetRecord.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.function.Supplier; import org.apache.poi.common.usermodel.GenericRecord; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.util.GenericRecordJsonWriter; import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.IOUtils; @@ -35,9 +36,6 @@ import org.apache.poi.util.RecordFormatException; */ public final class OldSheetRecord implements GenericRecord { - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - public static final short sid = 0x0085; private final int field_1_position_of_BOF; @@ -64,7 +62,7 @@ public final class OldSheetRecord implements GenericRecord { } } } - field_5_sheetname = IOUtils.safelyAllocate(field_4_sheetname_length, MAX_RECORD_LENGTH); + field_5_sheetname = IOUtils.safelyAllocate(field_4_sheetname_length, HSSFWorkbook.getMaxRecordLength()); in.read(field_5_sheetname, 0, field_4_sheetname_length); } diff --git a/poi/src/main/java/org/apache/poi/hssf/record/OldStringRecord.java b/poi/src/main/java/org/apache/poi/hssf/record/OldStringRecord.java index e81a2aa4b8..0334925cd8 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/OldStringRecord.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/OldStringRecord.java @@ -23,6 +23,7 @@ import java.util.function.Supplier; import org.apache.poi.common.usermodel.GenericRecord; import org.apache.poi.hpsf.Property; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.util.CodePageUtil; import org.apache.poi.util.GenericRecordJsonWriter; import org.apache.poi.util.GenericRecordUtil; @@ -35,9 +36,6 @@ import org.apache.poi.util.IOUtils; */ public final class OldStringRecord implements GenericRecord { - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - public static final short biff2_sid = 0x0007; public static final short biff345_sid = 0x0207; @@ -59,7 +57,7 @@ public final class OldStringRecord implements GenericRecord { } // Can only decode properly later when you know the codepage - field_2_bytes = IOUtils.safelyAllocate(field_1_string_len, MAX_RECORD_LENGTH); + field_2_bytes = IOUtils.safelyAllocate(field_1_string_len, HSSFWorkbook.getMaxRecordLength()); in.read(field_2_bytes, 0, field_1_string_len); } diff --git a/poi/src/main/java/org/apache/poi/hssf/record/RecordInputStream.java b/poi/src/main/java/org/apache/poi/hssf/record/RecordInputStream.java index 5b7b114cdb..6cb3aacb5e 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/RecordInputStream.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/RecordInputStream.java @@ -24,6 +24,7 @@ import java.util.Locale; import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; import org.apache.poi.hssf.dev.BiffViewer; import org.apache.poi.hssf.record.crypto.Biff8DecryptingStream; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.crypt.EncryptionInfo; import org.apache.poi.util.IOUtils; import org.apache.poi.util.Internal; @@ -39,12 +40,10 @@ import org.apache.poi.util.RecordFormatException; */ public final class RecordInputStream implements LittleEndianInput { - /** Maximum size of a single record (minus the 4 byte header) without a continue*/ public static final short MAX_RECORD_DATA_SIZE = 8224; private static final int INVALID_SID_VALUE = -1; - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; + /** * When {@link #_currentDataLength} has this value, it means that the previous BIFF record is * finished, the next sid has been properly read, but the data size field has not been read yet. @@ -442,7 +441,7 @@ public final class RecordInputStream implements LittleEndianInput { if (size ==0) { return EMPTY_BYTE_ARRAY; } - byte[] result = IOUtils.safelyAllocate(size, MAX_RECORD_LENGTH); + byte[] result = IOUtils.safelyAllocate(size, HSSFWorkbook.getMaxRecordLength()); readFully(result); return result; } diff --git a/poi/src/main/java/org/apache/poi/hssf/record/common/ExtRst.java b/poi/src/main/java/org/apache/poi/hssf/record/common/ExtRst.java index bb409edcad..ffd0d03eef 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/common/ExtRst.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/common/ExtRst.java @@ -26,6 +26,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.poi.common.usermodel.GenericRecord; import org.apache.poi.hssf.record.cont.ContinuableRecordOutput; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.IOUtils; import org.apache.poi.util.Internal; @@ -37,8 +38,6 @@ import static org.apache.logging.log4j.util.Unbox.box; @Internal public class ExtRst implements Comparable, GenericRecord { private static final Logger LOG = LogManager.getLogger(ExtRst.class); - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; private short reserved; @@ -126,7 +125,7 @@ public class ExtRst implements Comparable, GenericRecord { LOG.atWarn().log("ExtRst overran by {} bytes", box(-extraDataLength)); extraDataLength = 0; } - extraData = IOUtils.safelyAllocate(extraDataLength, MAX_RECORD_LENGTH); + extraData = IOUtils.safelyAllocate(extraDataLength, HSSFWorkbook.getMaxRecordLength()); for(int i=0; i int usedInBlock = (int) (length % _block_size); if (usedInBlock != 0 && usedInBlock != _block_size) { int toBlockEnd = _block_size - usedInBlock; - byte[] padding = IOUtils.safelyAllocate(toBlockEnd, POIFSFileSystem.MAX_RECORD_LENGTH); + byte[] padding = IOUtils.safelyAllocate(toBlockEnd, POIFSFileSystem.getMaxRecordLength()); Arrays.fill(padding, (byte) 0xFF); os.write(padding); } @@ -208,7 +208,7 @@ public final class POIFSDocument implements POIFSViewable, Iterable if (getSize() > 0) { // Get all the data into a single array - byte[] data = IOUtils.safelyAllocate(getSize(), POIFSFileSystem.MAX_RECORD_LENGTH); + byte[] data = IOUtils.safelyAllocate(getSize(), POIFSFileSystem.getMaxRecordLength()); int offset = 0; for (ByteBuffer buffer : _stream) { int length = Math.min(_block_size, data.length - offset); diff --git a/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java b/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java index 343aba35d3..7ac3a2ccdd 100644 --- a/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java +++ b/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java @@ -62,7 +62,7 @@ public class POIFSFileSystem extends BlockStore implements POIFSViewable, Closeable { //arbitrarily selected; may need to increase private static final int DEFAULT_MAX_RECORD_LENGTH = 100_000; - static int MAX_RECORD_LENGTH = DEFAULT_MAX_RECORD_LENGTH; + private static int MAX_RECORD_LENGTH = DEFAULT_MAX_RECORD_LENGTH; private static final Logger LOG = LogManager.getLogger(POIFSFileSystem.class); diff --git a/poi/src/main/java/org/apache/poi/poifs/property/PropertyTable.java b/poi/src/main/java/org/apache/poi/poifs/property/PropertyTable.java index 596bea5070..42f380f341 100644 --- a/poi/src/main/java/org/apache/poi/poifs/property/PropertyTable.java +++ b/poi/src/main/java/org/apache/poi/poifs/property/PropertyTable.java @@ -45,9 +45,6 @@ import static org.apache.logging.log4j.util.Unbox.box; public final class PropertyTable implements BATManaged { private static final Logger LOG = LogManager.getLogger(PropertyTable.class); - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - private final HeaderBlock _header_block; private final List _properties = new ArrayList<>(); private final POIFSBigBlockSize _bigBigBlockSize; @@ -91,7 +88,7 @@ public final class PropertyTable implements BATManaged { bb.array().length == _bigBigBlockSize.getBigBlockSize()) { data = bb.array(); } else { - data = IOUtils.safelyAllocate(_bigBigBlockSize.getBigBlockSize(), MAX_RECORD_LENGTH); + data = IOUtils.safelyAllocate(_bigBigBlockSize.getBigBlockSize(), POIFSFileSystem.getMaxRecordLength()); int toRead = data.length; if (bb.remaining() < _bigBigBlockSize.getBigBlockSize()) { diff --git a/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java b/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java index 190afb71dc..e3a450cfa2 100644 --- a/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java +++ b/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java @@ -29,6 +29,7 @@ import org.apache.poi.poifs.common.POIFSConstants; import org.apache.poi.poifs.filesystem.FileMagic; import org.apache.poi.poifs.filesystem.NotOLE2FileException; import org.apache.poi.poifs.filesystem.OfficeXmlFileException; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.HexDump; import org.apache.poi.util.IOUtils; import org.apache.poi.util.IntegerField; @@ -42,9 +43,6 @@ import org.apache.poi.util.ShortField; */ public final class HeaderBlock implements HeaderBlockConstants { - //arbitrarily selected; may need to increase - private static final int MAX_RECORD_LENGTH = 100_000; - private static final byte _default_value = ( byte ) 0xFF; /** @@ -108,7 +106,7 @@ public final class HeaderBlock implements HeaderBlockConstants { // Fetch the rest of the block if needed if(bigBlockSize.getBigBlockSize() != 512) { int rest = bigBlockSize.getBigBlockSize() - 512; - byte[] tmp = IOUtils.safelyAllocate(rest, MAX_RECORD_LENGTH); + byte[] tmp = IOUtils.safelyAllocate(rest, POIFSFileSystem.getMaxRecordLength()); IOUtils.readFully(stream, tmp); } } -- cgit v1.2.3