aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2015-07-01 00:43:33 +0000
committerNick Burch <nick@apache.org>2015-07-01 00:43:33 +0000
commitaa84a05ad161bad4f55d5d73b675c2dbf2e04fe7 (patch)
tree8f8355910135c49e71d2c6d9c118b3a0ede5e71a
parent335ba49ef5dc86fcb5ffbda2782e1b16b84cfef8 (diff)
downloadpoi-aa84a05ad161bad4f55d5d73b675c2dbf2e04fe7.tar.gz
poi-aa84a05ad161bad4f55d5d73b675c2dbf2e04fe7.zip
To better match OPOIFS, pad to the end of a block with 0xFF/-1
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1688543 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java10
-rw-r--r--src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSMiniStore.java2
2 files changed, 12 insertions, 0 deletions
diff --git a/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java b/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java
index bdc35cee71..c94e427b92 100644
--- a/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java
+++ b/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -143,6 +144,15 @@ public final class NPOIFSDocument implements POIFSViewable {
os.write(buf, 0, readBytes);
}
+ // Pad to the end of the block with -1s
+ int usedInBlock = length % _block_size;
+ if (usedInBlock != 0 && usedInBlock != _block_size) {
+ int toBlockEnd = _block_size - usedInBlock;
+ byte[] padding = new byte[toBlockEnd];
+ Arrays.fill(padding, (byte)0xFF);
+ os.write(padding);
+ }
+
// Tidy and return the length
os.close();
return length;
diff --git a/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSMiniStore.java b/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSMiniStore.java
index 44e066a6f7..4f102084d7 100644
--- a/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSMiniStore.java
+++ b/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSMiniStore.java
@@ -431,6 +431,7 @@ public final class TestNPOIFSMiniStore extends POITestCase {
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3)); // Mini
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(4));
+ // First 2 Mini blocks will be used
assertEquals(2, ministore.getFreeBlock());
// Add one more mini-stream, and check
@@ -442,6 +443,7 @@ public final class TestNPOIFSMiniStore extends POITestCase {
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3)); // Mini
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(4));
+ // One more mini-block will be used
assertEquals(3, ministore.getFreeBlock());
// Check the contents too