aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/poi/poifs/filesystem
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2010-12-29 03:00:46 +0000
committerNick Burch <nick@apache.org>2010-12-29 03:00:46 +0000
commitbf27275eb2421a2ac8dc79799f9d0f2232b29197 (patch)
treebf24d88ad757ed6446120c06ffe96c55cd1928c9 /src/java/org/apache/poi/poifs/filesystem
parentada898d0cf1ac89a05e4b65897c5e47c0f15774c (diff)
downloadpoi-bf27275eb2421a2ac8dc79799f9d0f2232b29197.tar.gz
poi-bf27275eb2421a2ac8dc79799f9d0f2232b29197.zip
More NPOIFS BAT vs XBAT confusion fixes. Also fixes recent POIFS regression on big files, and adds a POIFS unit test for XBAT containing files (previously there wasn't one)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1053511 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/poi/poifs/filesystem')
-rw-r--r--src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java b/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
index 6cc5730164..b506e4b9aa 100644
--- a/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
+++ b/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
@@ -45,6 +45,7 @@ import org.apache.poi.poifs.nio.FileBackedDataSource;
import org.apache.poi.poifs.property.DirectoryProperty;
import org.apache.poi.poifs.property.NPropertyTable;
import org.apache.poi.poifs.storage.BATBlock;
+import org.apache.poi.poifs.storage.BlockAllocationTableReader;
import org.apache.poi.poifs.storage.BlockAllocationTableWriter;
import org.apache.poi.poifs.storage.HeaderBlock;
import org.apache.poi.poifs.storage.HeaderBlockConstants;
@@ -179,6 +180,9 @@ public class NPOIFSFileSystem extends BlockStore
// Have the header processed
_header = new HeaderBlock(headerBuffer);
+
+ // Sanity check the block count
+ BlockAllocationTableReader.sanityCheckBlockCount(_header.getBATCount());
// We need to buffer the whole file into memory when
// working with an InputStream.
@@ -455,8 +459,8 @@ public class NPOIFSFileSystem extends BlockStore
System.arraycopy(_header.getBATArray(), 0, newBATs, 0, newBATs.length-1);
newBATs[newBATs.length-1] = offset;
_header.setBATArray(newBATs);
- _header.setBATCount(newBATs.length);
}
+ _header.setBATCount(_bat_blocks.size());
// The current offset stores us, but the next one is free
return offset+1;