Author: fanningpj
Date: Sat Feb 19 12:08:48 2022
New Revision: 1898213
URL: http://svn.apache.org/viewvc?rev=1898213&view=rev
Log:
refactor some stream code
Modified:
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/XSSFBFileHandler.java
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLProperties.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/DummyKeystore.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/CompressedStreamStore.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusImage.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIAttribute.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/Picture.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/storage/RawDataUtil.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/util/NumberRenderingSpreadsheetGenerator.java
Modified:
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/XSSFBFileHandler.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/XSSFBFileHandler.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/XSSFBFileHandler.java
(original)
+++
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/XSSFBFileHandler.java
Sat Feb 19 12:08:48 2022
@@ -16,12 +16,12 @@
==================================================================== */
package org.apache.poi.stress;
-import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.util.IOUtils;
@@ -41,11 +41,11 @@ public class XSSFBFileHandler extends Ab
public void handleFile(InputStream stream, String path) throws Exception {
byte[] bytes = IOUtils.toByteArray(stream);
- try (OPCPackage opcPackage = OPCPackage.open(new
ByteArrayInputStream(bytes))) {
+ try (OPCPackage opcPackage = OPCPackage.open(new
UnsynchronizedByteArrayInputStream(bytes))) {
testOne(opcPackage);
}
- testNotHandledByWorkbookException(OPCPackage.open(new
ByteArrayInputStream(bytes)));
+ testNotHandledByWorkbookException(OPCPackage.open(new
UnsynchronizedByteArrayInputStream(bytes)));
}
private void testNotHandledByWorkbookException(OPCPackage pkg) throws
IOException {
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
(original)
+++
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFBuiltinTableStyle.java
Sat Feb 19 12:08:48 2022
@@ -17,7 +17,6 @@
package org.apache.poi.xssf.usermodel;
-import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.EnumMap;
@@ -29,6 +28,7 @@ import javax.xml.transform.TransformerEx
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.commons.io.output.StringBuilderWriter;
import org.apache.poi.ooxml.util.DocumentHelper;
import org.apache.poi.ss.usermodel.DifferentialStyleProvider;
@@ -407,7 +407,10 @@ public enum XSSFBuiltinTableStyle {
// hack because I can't figure out how to get XMLBeans to
parse a sub-element in a standalone manner
// - build a fake styles.xml file with just this built-in
StylesTable styles = new StylesTable();
- styles.readFrom(new ByteArrayInputStream(styleXML(dxfsNode,
tableStyleNode).getBytes(StandardCharsets.UTF_8)));
+ try (UnsynchronizedByteArrayInputStream bis = new
UnsynchronizedByteArrayInputStream(
+ styleXML(dxfsNode,
tableStyleNode).getBytes(StandardCharsets.UTF_8))) {
+ styles.readFrom(bis);
+ }
styleMap.put(builtIn, new XSSFBuiltinTypeStyleStyle(builtIn,
styles.getExplicitTableStyle(styleName)));
}
} catch (Exception e) {
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLProperties.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLProperties.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLProperties.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLProperties.java
Sat Feb 19 12:08:48 2022
@@ -26,7 +26,6 @@ import static org.junit.jupiter.api.Asse
import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.Date;
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/DummyKeystore.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/DummyKeystore.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/DummyKeystore.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/DummyKeystore.java
Sat Feb 19 12:08:48 2022
@@ -24,7 +24,6 @@
package org.apache.poi.poifs.crypt.dsig;
import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -53,6 +52,7 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.poi.poifs.crypt.CryptoFunctions;
import org.apache.poi.poifs.storage.RawDataUtil;
import org.apache.poi.util.LocaleUtil;
@@ -139,7 +139,7 @@ public class DummyKeystore {
public DummyKeystore(String pfxInput, String storePass) throws
GeneralSecurityException, IOException {
CryptoFunctions.registerBouncyCastle();
keystore = KeyStore.getInstance("PKCS12");
- try (InputStream fis = new
ByteArrayInputStream(RawDataUtil.decompress(pfxInput))) {
+ try (InputStream fis = new
UnsynchronizedByteArrayInputStream(RawDataUtil.decompress(pfxInput))) {
keystore.load(fis, storePass.toCharArray());
}
}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
Sat Feb 19 12:08:48 2022
@@ -16,7 +16,6 @@
==================================================================== */
package org.apache.poi.extractor.ole2;
-import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -24,6 +23,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.stream.StreamSupport;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.extractor.ExtractorFactory;
@@ -185,7 +185,7 @@ public class OLE2ScratchpadExtractorFact
for (AttachmentChunks attachment : msg.getAttachmentFiles()) {
if (attachment.getAttachData() != null) {
byte[] data = attachment.getAttachData().getValue();
- nonPOIFS.add( new ByteArrayInputStream(data) );
+ nonPOIFS.add( new UnsynchronizedByteArrayInputStream(data)
);
} else if (attachment.getAttachmentDirectory() != null) {
dirs.add(attachment.getAttachmentDirectory().getDirectory());
}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/CompressedStreamStore.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/CompressedStreamStore.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/CompressedStreamStore.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hdgf/streams/CompressedStreamStore.java
Sat Feb 19 12:08:48 2022
@@ -17,9 +17,9 @@
package org.apache.poi.hdgf.streams;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.poi.hdgf.HDGFLZW;
import org.apache.poi.util.IOUtils;
@@ -92,25 +92,26 @@ public final class CompressedStreamStore
* Decompresses the given data, returning it as header + contents
*/
public static byte[][] decompress(byte[] data, int offset, int length)
throws IOException {
- ByteArrayInputStream bais = new ByteArrayInputStream(data, offset,
length);
+ try (UnsynchronizedByteArrayInputStream bais = new
UnsynchronizedByteArrayInputStream(data, offset, length)) {
+ // Decompress
+ HDGFLZW lzw = new HDGFLZW();
+ byte[] decompressed = lzw.decompress(bais);
+
+ if (decompressed.length < 4) {
+ throw new IllegalArgumentException("Could not read enough data
to decompress: " + decompressed.length);
+ }
+
+ // Split into header and contents
+ byte[][] ret = new byte[2][];
+ ret[0] = new byte[4];
+ ret[1] = new byte[decompressed.length - 4];
- // Decompress
- HDGFLZW lzw = new HDGFLZW();
- byte[] decompressed = lzw.decompress(bais);
+ System.arraycopy(decompressed, 0, ret[0], 0, 4);
+ System.arraycopy(decompressed, 4, ret[1], 0, ret[1].length);
- if (decompressed.length < 4) {
- throw new IllegalArgumentException("Could not read enough data to
decompress: " + decompressed.length);
+ // All done
+ return ret;
}
- // Split into header and contents
- byte[][] ret = new byte[2][];
- ret[0] = new byte[4];
- ret[1] = new byte[decompressed.length - 4];
-
- System.arraycopy(decompressed, 0, ret[0], 0, 4);
- System.arraycopy(decompressed, 4, ret[1], 0, ret[1].length);
-
- // All done
- return ret;
}
}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
Sat Feb 19 12:08:48 2022
@@ -25,11 +25,11 @@ import java.awt.RenderingHints;
import java.awt.geom.Dimension2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.poi.common.usermodel.GenericRecord;
import org.apache.poi.hemf.usermodel.HemfPicture;
import org.apache.poi.hwmf.draw.HwmfGraphicsState;
@@ -65,7 +65,7 @@ public class HemfImageRenderer implement
if (!PictureData.PictureType.EMF.contentType.equals(contentType)) {
throw new IOException("Invalid picture type");
}
- image = new HemfPicture(new ByteArrayInputStream(data));
+ image = new HemfPicture(new UnsynchronizedByteArrayInputStream(data));
}
@Override
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java
Sat Feb 19 12:08:48 2022
@@ -26,7 +26,6 @@ import java.awt.Color;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.AbstractMap;
import java.util.Arrays;
@@ -40,6 +39,7 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.common.usermodel.GenericRecord;
import org.apache.poi.hemf.draw.HemfDrawProperties;
@@ -391,7 +391,7 @@ public class HemfPlusBrush {
EmfPlusBrushData brushData = brushType.constructor.get();
byte[] buf = getRawData(continuedObjectData);
try {
- brushData.init(new LittleEndianInputStream(new
ByteArrayInputStream(buf)), buf.length);
+ brushData.init(new LittleEndianInputStream(new
UnsynchronizedByteArrayInputStream(buf)), buf.length);
} catch (IOException e) {
throw new RuntimeException(e);
}
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusImage.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusImage.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusImage.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusImage.java
Sat Feb 19 12:08:48 2022
@@ -22,7 +22,6 @@ import static org.apache.poi.hemf.record
import java.awt.Color;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -32,6 +31,7 @@ import java.util.function.Supplier;
import javax.imageio.ImageIO;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.hemf.draw.HemfDrawProperties;
import org.apache.poi.hemf.draw.HemfGraphics;
@@ -419,21 +419,24 @@ public class HemfPlusImage {
if (getBitmapType() == EmfPlusBitmapDataType.PIXEL) {
return new Rectangle2D.Double(0, 0, bitmapWidth,
bitmapHeight);
} else {
- BufferedImage bi = ImageIO.read(new
ByteArrayInputStream(getRawData(continuedObjectData)));
- return new Rectangle2D.Double(bi.getMinX(),
bi.getMinY(), bi.getWidth(), bi.getHeight());
+ try(UnsynchronizedByteArrayInputStream is = new
UnsynchronizedByteArrayInputStream(getRawData(continuedObjectData))) {
+ BufferedImage bi = ImageIO.read(is);
+ return new Rectangle2D.Double(bi.getMinX(),
bi.getMinY(), bi.getWidth(), bi.getHeight());
+ }
}
case METAFILE:
- ByteArrayInputStream bis = new
ByteArrayInputStream(getRawData(continuedObjectData));
- switch (getMetafileType()) {
- case Wmf:
- case WmfPlaceable:
- HwmfPicture wmf = new HwmfPicture(bis);
- return wmf.getBounds();
- case Emf:
- case EmfPlusDual:
- case EmfPlusOnly:
- HemfPicture emf = new HemfPicture(bis);
- return emf.getBounds();
+ try(UnsynchronizedByteArrayInputStream bis = new
UnsynchronizedByteArrayInputStream(getRawData(continuedObjectData))) {
+ switch (getMetafileType()) {
+ case Wmf:
+ case WmfPlaceable:
+ HwmfPicture wmf = new HwmfPicture(bis);
+ return wmf.getBounds();
+ case Emf:
+ case EmfPlusDual:
+ case EmfPlusOnly:
+ HemfPicture emf = new HemfPicture(bis);
+ return emf.getBounds();
+ }
}
break;
default:
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIAttribute.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIAttribute.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIAttribute.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIAttribute.java
Sat Feb 19 12:08:48 2022
@@ -17,13 +17,13 @@
package org.apache.poi.hmef.attribute;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.poi.hmef.Attachment;
import org.apache.poi.hmef.HMEFMessage;
import org.apache.poi.hsmf.datatypes.MAPIProperty;
@@ -115,107 +115,108 @@ public class MAPIAttribute {
"instead received a " + parent.getProperty() + " one"
);
}
- ByteArrayInputStream inp = new ByteArrayInputStream(parent.getData());
+ try(UnsynchronizedByteArrayInputStream inp = new
UnsynchronizedByteArrayInputStream(parent.getData())) {
+ // First up, get the number of attributes
+ int count = LittleEndian.readInt(inp);
+ List<MAPIAttribute> attrs = new ArrayList<>();
+
+ // Now, read each one in in turn
+ for(int i=0; i<count; i++) {
+ int typeAndMV = LittleEndian.readUShort(inp);
+ int id = LittleEndian.readUShort(inp);
+
+ // Is it either Multi-Valued or Variable-Length?
+ boolean isMV = false;
+ boolean isVL = false;
+ int typeId = typeAndMV;
+ if( (typeAndMV & Types.MULTIVALUED_FLAG) != 0 ) {
+ isMV = true;
+ typeId -= Types.MULTIVALUED_FLAG;
+ }
+ if(typeId == Types.ASCII_STRING.getId() || typeId ==
Types.UNICODE_STRING.getId() ||
+ typeId == Types.BINARY.getId() || typeId ==
Types.DIRECTORY.getId()) {
+ isVL = true;
+ }
- // First up, get the number of attributes
- int count = LittleEndian.readInt(inp);
- List<MAPIAttribute> attrs = new ArrayList<>();
-
- // Now, read each one in in turn
- for(int i=0; i<count; i++) {
- int typeAndMV = LittleEndian.readUShort(inp);
- int id = LittleEndian.readUShort(inp);
-
- // Is it either Multi-Valued or Variable-Length?
- boolean isMV = false;
- boolean isVL = false;
- int typeId = typeAndMV;
- if( (typeAndMV & Types.MULTIVALUED_FLAG) != 0 ) {
- isMV = true;
- typeId -= Types.MULTIVALUED_FLAG;
- }
- if(typeId == Types.ASCII_STRING.getId() || typeId ==
Types.UNICODE_STRING.getId() ||
- typeId == Types.BINARY.getId() || typeId ==
Types.DIRECTORY.getId()) {
- isVL = true;
- }
+ // Turn the type ID into a strongly typed thing
+ MAPIType type = Types.getById(typeId);
+ if (type == null) {
+ type = Types.createCustom(typeId);
+ }
- // Turn the type ID into a strongly typed thing
- MAPIType type = Types.getById(typeId);
- if (type == null) {
- type = Types.createCustom(typeId);
- }
+ // If it's a named property, rather than a standard
+ // MAPI property, grab the details of it
+ MAPIProperty prop = MAPIProperty.get(id);
+ if(id >= 0x8000 && id <= 0xFFFF) {
+ byte[] guid = new byte[16];
+ if (IOUtils.readFully(inp, guid) < 0) {
+ throw new IOException("Not enough data to read guid");
+ }
+ int mptype = LittleEndian.readInt(inp);
- // If it's a named property, rather than a standard
- // MAPI property, grab the details of it
- MAPIProperty prop = MAPIProperty.get(id);
- if(id >= 0x8000 && id <= 0xFFFF) {
- byte[] guid = new byte[16];
- if (IOUtils.readFully(inp, guid) < 0) {
- throw new IOException("Not enough data to read guid");
- }
- int mptype = LittleEndian.readInt(inp);
-
- // Get the name of it
- String name;
- if(mptype == 0) {
- // It's based on a normal one
- int mpid = LittleEndian.readInt(inp);
- MAPIProperty base = MAPIProperty.get(mpid);
- name = base.name;
- } else {
- // Custom name was stored
- int mplen = LittleEndian.readInt(inp);
- byte[] mpdata = IOUtils.safelyAllocate(mplen,
MAX_RECORD_LENGTH);
- if (IOUtils.readFully(inp, mpdata) < 0) {
- throw new IOException("Not enough data to read " + mplen + "
bytes for attribute name");
+ // Get the name of it
+ String name;
+ if(mptype == 0) {
+ // It's based on a normal one
+ int mpid = LittleEndian.readInt(inp);
+ MAPIProperty base = MAPIProperty.get(mpid);
+ name = base.name;
+ } else {
+ // Custom name was stored
+ int mplen = LittleEndian.readInt(inp);
+ byte[] mpdata = IOUtils.safelyAllocate(mplen,
MAX_RECORD_LENGTH);
+ if (IOUtils.readFully(inp, mpdata) < 0) {
+ throw new IOException("Not enough data to read " + mplen
+ " bytes for attribute name");
+ }
+ name = StringUtil.getFromUnicodeLE(mpdata, 0, (mplen/2)-1);
+ skipToBoundary(mplen, inp);
}
- name = StringUtil.getFromUnicodeLE(mpdata, 0, (mplen/2)-1);
- skipToBoundary(mplen, inp);
+
+ // Now create
+ prop = MAPIProperty.createCustom(id, type, name);
+ }
+ if(prop == MAPIProperty.UNKNOWN) {
+ prop = MAPIProperty.createCustom(id, type, "(unknown " +
Integer.toHexString(id) + ")");
}
- // Now create
- prop = MAPIProperty.createCustom(id, type, name);
- }
- if(prop == MAPIProperty.UNKNOWN) {
- prop = MAPIProperty.createCustom(id, type, "(unknown " +
Integer.toHexString(id) + ")");
- }
+ // Now read in the value(s)
+ int values = 1;
+ if(isMV || isVL) {
+ values = LittleEndian.readInt(inp);
+ }
- // Now read in the value(s)
- int values = 1;
- if(isMV || isVL) {
- values = LittleEndian.readInt(inp);
- }
+ if (type == Types.NULL && values > 1) {
+ throw new IOException("Placeholder/NULL arrays aren't
supported.");
+ }
- if (type == Types.NULL && values > 1) {
- throw new IOException("Placeholder/NULL arrays aren't supported.");
- }
+ for(int j=0; j<values; j++) {
+ int len = getLength(type, inp);
+ byte[] data = IOUtils.safelyAllocate(len, MAX_RECORD_LENGTH);
+ if (IOUtils.readFully(inp, data) < 0) {
+ throw new IOException("Not enough data to read " + len + "
bytes of attribute value");
+ }
+ skipToBoundary(len, inp);
- for(int j=0; j<values; j++) {
- int len = getLength(type, inp);
- byte[] data = IOUtils.safelyAllocate(len, MAX_RECORD_LENGTH);
- if (IOUtils.readFully(inp, data) < 0) {
- throw new IOException("Not enough data to read " + len + "
bytes of attribute value");
- }
- skipToBoundary(len, inp);
-
- // Create
- MAPIAttribute attr;
- if(type == Types.UNICODE_STRING || type == Types.ASCII_STRING) {
- attr = new MAPIStringAttribute(prop, typeId, data);
- } else if(type == Types.APP_TIME || type == Types.TIME) {
- attr = new MAPIDateAttribute(prop, typeId, data);
- } else if(id == MAPIProperty.RTF_COMPRESSED.id) {
- attr = new MAPIRtfAttribute(prop, typeId, data);
- } else {
- attr = new MAPIAttribute(prop, typeId, data);
+ // Create
+ MAPIAttribute attr;
+ if(type == Types.UNICODE_STRING || type == Types.ASCII_STRING) {
+ attr = new MAPIStringAttribute(prop, typeId, data);
+ } else if(type == Types.APP_TIME || type == Types.TIME) {
+ attr = new MAPIDateAttribute(prop, typeId, data);
+ } else if(id == MAPIProperty.RTF_COMPRESSED.id) {
+ attr = new MAPIRtfAttribute(prop, typeId, data);
+ } else {
+ attr = new MAPIAttribute(prop, typeId, data);
+ }
+ attrs.add(attr);
}
- attrs.add(attr);
}
- }
- // All done
- return attrs;
+ // All done
+ return attrs;
+ }
}
+
private static int getLength(MAPIType type, InputStream inp) throws
IOException {
if (type.isFixedLength()) {
return type.getLength();
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hmef/attribute/MAPIRtfAttribute.java
Sat Feb 19 12:08:48 2022
@@ -17,9 +17,10 @@
package org.apache.poi.hmef.attribute;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.poi.hmef.Attachment;
import org.apache.poi.hmef.CompressedRTF;
import org.apache.poi.hmef.HMEFMessage;
@@ -44,7 +45,11 @@ public final class MAPIRtfAttribute exte
// Decompress it, removing any trailing padding as needed
CompressedRTF rtf = new CompressedRTF();
- byte[] tmp = rtf.decompress(new ByteArrayInputStream(data));
+ byte[] tmp;
+ try (InputStream is = new UnsynchronizedByteArrayInputStream(data)) {
+ tmp = rtf.decompress(is);
+ }
+
if(tmp.length > rtf.getDeCompressedSize()) {
this.decompressed = IOUtils.safelyClone(tmp, 0,
rtf.getDeCompressedSize(), MAX_RECORD_LENGTH);
} else {
Modified:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/Picture.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/Picture.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/Picture.java
(original)
+++
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/Picture.java
Sat Feb 19 12:08:48 2022
@@ -17,13 +17,13 @@
package org.apache.poi.hwpf.usermodel;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Collections;
import java.util.List;
import java.util.zip.InflaterInputStream;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -140,8 +140,8 @@ public final class Picture {
*/
if ( matchSignature( rawContent, COMPRESSED1, 32 )
|| matchSignature( rawContent, COMPRESSED2, 32 ) ) {
- try (ByteArrayInputStream bis = new ByteArrayInputStream(
rawContent, 33, rawContent.length - 33 );
- InflaterInputStream in = new InflaterInputStream(bis);
+ try (UnsynchronizedByteArrayInputStream bis = new
UnsynchronizedByteArrayInputStream( rawContent, 33, rawContent.length - 33 );
+ InflaterInputStream in = new InflaterInputStream(bis);
UnsynchronizedByteArrayOutputStream out = new
UnsynchronizedByteArrayOutputStream()) {
IOUtils.copy(in, out);
Modified:
poi/trunk/poi/src/test/java/org/apache/poi/poifs/storage/RawDataUtil.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/poifs/storage/RawDataUtil.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/poifs/storage/RawDataUtil.java
(original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/poifs/storage/RawDataUtil.java
Sat Feb 19 12:08:48 2022
@@ -16,11 +16,11 @@
==================================================================== */
package org.apache.poi.poifs.storage;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.util.HexRead;
import org.apache.poi.util.IOUtils;
@@ -53,7 +53,7 @@ public final class RawDataUtil {
*/
public static byte[] decompress(String data) throws IOException {
byte[] base64Bytes = Base64.getDecoder().decode(data);
- return IOUtils.toByteArray(new GZIPInputStream(new
ByteArrayInputStream(base64Bytes)));
+ return IOUtils.toByteArray(new GZIPInputStream(new
UnsynchronizedByteArrayInputStream(base64Bytes)));
}
/**
Modified:
poi/trunk/poi/src/test/java/org/apache/poi/ss/util/NumberRenderingSpreadsheetGenerator.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/util/NumberRenderingSpreadsheetGenerator.java?rev=1898213&r1=1898212&r2=1898213&view=diff
==============================================================================
---
poi/trunk/poi/src/test/java/org/apache/poi/ss/util/NumberRenderingSpreadsheetGenerator.java
(original)
+++
poi/trunk/poi/src/test/java/org/apache/poi/ss/util/NumberRenderingSpreadsheetGenerator.java
Sat Feb 19 12:08:48 2022
@@ -17,7 +17,6 @@
package org.apache.poi.ss.util;
-import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
@@ -27,6 +26,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
@@ -212,14 +212,12 @@ public class NumberRenderingSpreadsheetG
}
private static String interpretLong(byte[] fileContent, int offset) {
- InputStream is = new ByteArrayInputStream(fileContent, offset, 8);
- long l;
- try {
- l = new DataInputStream(is).readLong();
+ try (InputStream is = new
UnsynchronizedByteArrayInputStream(fileContent, offset, 8)) {
+ long l = new DataInputStream(is).readLong();
+ return "0x" + Long.toHexString(l).toUpperCase(Locale.ROOT);
} catch (IOException e) {
- throw new RuntimeException(e);
+ throw new IllegalStateException("Problem in interpretLong", e);
}
- return "0x" + Long.toHexString(l).toUpperCase(Locale.ROOT);
}
private static boolean isNaNBytes(byte[] fileContent, int offset) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]