You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2010/12/19 12:43:54 UTC
svn commit: r1050815 - in /poi/trunk/src/java/org/apache/poi/poifs:
filesystem/NPOIFSFileSystem.java property/PropertyFactory.java
property/PropertyTable.java
Author: nick
Date: Sun Dec 19 11:43:54 2010
New Revision: 1050815
URL: http://svn.apache.org/viewvc?rev=1050815&view=rev
Log:
Bit more on NPOIFSFileSystem, and some typo fixes in documentation
Modified:
poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
poi/trunk/src/java/org/apache/poi/poifs/property/PropertyFactory.java
poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java
Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java?rev=1050815&r1=1050814&r2=1050815&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java Sun Dec 19 11:43:54 2010
@@ -266,17 +266,22 @@ public class NPOIFSFileSystem
// Grab the block size
bigBlockSize = _header.getBigBlockSize();
+ // Each block should only ever be used by one of the
+ // FAT, XFAT or Property Table. Ensure it does
+ ChainLoopDetector loopDetector = new ChainLoopDetector();
+
// Read the FAT blocks
- for(int fatAT : _header.getBATArray()) {
- ByteBuffer fatData = getBlockAt(fatAT);
+ for(int fatAt : _header.getBATArray()) {
+ loopDetector.claim(fatAt);
+ ByteBuffer fatData = getBlockAt(fatAt);
_blocks.add(BATBlock.createBATBlock(bigBlockSize, fatData));
}
// Now read the XFAT blocks
-// TODO Corrupt / Loop checking
BATBlock xfat;
int nextAt = _header.getXBATIndex();
for(int i=0; i<_header.getXBATCount(); i++) {
+ loopDetector.claim(nextAt);
ByteBuffer fatData = getBlockAt(nextAt);
xfat = BATBlock.createBATBlock(bigBlockSize, fatData);
nextAt = xfat.getValueAt(bigBlockSize.getNextXBATChainOffset());
@@ -287,7 +292,6 @@ public class NPOIFSFileSystem
// We're now able to load steams
// Use this to read in the properties
// TODO
-// TODO With loop checking
}
/**
@@ -614,6 +618,27 @@ public class NPOIFSFileSystem
}
}
}
+
+ /**
+ * Used to detect if a chain has a loop in it, so
+ * we can bail out with an error rather than
+ * spinning away for ever...
+ */
+ private class ChainLoopDetector {
+ private boolean[] used_blocks;
+ private ChainLoopDetector() throws IOException {
+ used_blocks = new boolean[(int)(_data.size()/bigBlockSize.getBigBlockSize())];
+ }
+ private void claim(int offset) {
+ if(used_blocks[offset]) {
+ throw new IllegalStateException(
+ "Potential loop detected - Block " + offset +
+ " was already claimed but was just requested again"
+ );
+ }
+ used_blocks[offset] = true;
+ }
+ }
/* ********** START begin implementation of POIFSViewable ********** */
Modified: poi/trunk/src/java/org/apache/poi/poifs/property/PropertyFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/property/PropertyFactory.java?rev=1050815&r1=1050814&r2=1050815&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/property/PropertyFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/property/PropertyFactory.java Sun Dec 19 11:43:54 2010
@@ -28,7 +28,7 @@ import org.apache.poi.poifs.storage.List
/**
* Factory for turning an array of RawDataBlock instances containing
- * Proprty data into an array of proper Property objects.
+ * Property data into an array of proper Property objects.
*
* The array produced may be sparse, in that any portion of data that
* should correspond to a Property, but which does not map to a proper
Modified: poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java?rev=1050815&r1=1050814&r2=1050815&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java Sun Dec 19 11:43:54 2010
@@ -32,7 +32,7 @@ import org.apache.poi.poifs.storage.RawD
/**
* This class embodies the Property Table for the filesystem; this is
- * basically the dsirectory for all of the documents in the
+ * basically the directory for all of the documents in the
* filesystem.
*
* @author Marc Johnson (mjohnson at apache dot org)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org