poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r1050815 - in /poi/trunk/src/java/org/apache/poi/poifs: filesystem/NPOIFSFileSystem.java property/PropertyFactory.java property/PropertyTable.java
Date Sun, 19 Dec 2010 11:43:54 GMT
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


Mime
View raw message