aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--poi-scratchpad/src/main/java/org/apache/poi/hslf/record/ExOleObjStg.java11
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java2
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDocumentOutputStream.java18
-rw-r--r--poi/src/main/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java10
-rw-r--r--poi/src/main/java/org/apache/poi/util/IOUtils.java2
5 files changed, 37 insertions, 6 deletions
diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/ExOleObjStg.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/ExOleObjStg.java
index 2849601612..dfff540574 100644
--- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/ExOleObjStg.java
+++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/ExOleObjStg.java
@@ -21,6 +21,7 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.UncheckedIOException;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Supplier;
@@ -102,13 +103,21 @@ public class ExOleObjStg extends PositionDependentRecordAtom implements PersistR
* Opens an input stream which will decompress the data on the fly.
*
* @return the data input stream.
+ * @throws UncheckedIOException if the data size exceeds the expected size.
*/
public InputStream getData() {
if (isCompressed()) {
int size = LittleEndian.getInt(_data);
InputStream compressedStream = new ByteArrayInputStream(_data, 4, _data.length);
- return new BoundedInputStream(new InflaterInputStream(compressedStream), size);
+ try {
+ return BoundedInputStream.builder()
+ .setInputStream(new InflaterInputStream(compressedStream))
+ .setMaxCount(size)
+ .get();
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
} else {
return new ByteArrayInputStream(_data, 0, _data.length);
}
diff --git a/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java b/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
index ed0cf12372..bc6eccdaf4 100644
--- a/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
+++ b/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
@@ -205,7 +205,7 @@ public class CryptoAPIDecryptor extends Decryptor {
for (StreamDescriptorEntry entry : entries) {
sbis.seek(entry.streamOffset);
sbis.setBlock(entry.block);
- try (InputStream is = new BoundedInputStream(sbis, entry.streamSize)) {
+ try (InputStream is = BoundedInputStream.builder().setInputStream(sbis).setMaxCount(entry.streamSize).get()) {
fsOut.createDocument(is, entry.streamName);
}
}
diff --git a/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDocumentOutputStream.java b/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDocumentOutputStream.java
index 34c4a74675..cd2443d46f 100644
--- a/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDocumentOutputStream.java
+++ b/poi/src/main/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDocumentOutputStream.java
@@ -16,7 +16,9 @@
==================================================================== */
package org.apache.poi.poifs.crypt.cryptoapi;
+import java.io.IOException;
import java.io.InputStream;
+import java.io.UncheckedIOException;
import java.security.GeneralSecurityException;
import javax.crypto.Cipher;
@@ -40,8 +42,22 @@ import org.apache.poi.util.Internal;
cipher = encryptor.initCipherForBlock(null, 0);
}
+ /**
+ * Returns the encrypted data.
+ *
+ * @param maxSize
+ * @return the encrypted data
+ * @throws UncheckedIOException if an I/O error occurs
+ */
public InputStream toInputStream(long maxSize) {
- return new BoundedInputStream(toInputStream(), maxSize);
+ try {
+ return BoundedInputStream.builder()
+ .setInputStream(toInputStream())
+ .setMaxCount(maxSize)
+ .get();
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
}
public void setSize(int count) {
diff --git a/poi/src/main/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java b/poi/src/main/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java
index 145f9b8bb1..eb82aedaee 100644
--- a/poi/src/main/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java
+++ b/poi/src/main/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java
@@ -140,8 +140,14 @@ public class StandardDecryptor extends Decryptor {
long cipherLen = (_length/blockSize + 1) * blockSize;
Cipher cipher = getCipher(getSecretKey());
- InputStream boundedDis = new BoundedInputStream(dis, cipherLen);
- return new BoundedInputStream(new CipherInputStream(boundedDis, cipher), _length);
+ final InputStream boundedDis = BoundedInputStream.builder()
+ .setInputStream(dis)
+ .setMaxCount(cipherLen)
+ .get();
+ return BoundedInputStream.builder()
+ .setInputStream(new CipherInputStream(boundedDis, cipher))
+ .setMaxCount(_length)
+ .get();
}
/**
diff --git a/poi/src/main/java/org/apache/poi/util/IOUtils.java b/poi/src/main/java/org/apache/poi/util/IOUtils.java
index 4fa3484af8..2b9cbd730b 100644
--- a/poi/src/main/java/org/apache/poi/util/IOUtils.java
+++ b/poi/src/main/java/org/apache/poi/util/IOUtils.java
@@ -142,7 +142,7 @@ public final class IOUtils {
stream.mark(limit);
try (UnsynchronizedByteArrayOutputStream bos = UnsynchronizedByteArrayOutputStream.builder().setBufferSize(limit).get()) {
- copy(new BoundedInputStream(stream, limit), bos);
+ copy(BoundedInputStream.builder().setInputStream(stream).setMaxCount(limit).get(), bos);
int readBytes = bos.size();
if (readBytes == 0) {