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 2015/07/06 23:39:42 UTC
svn commit: r1689505 - in /poi/trunk/src: java/org/apache/poi/poifs/dev/
java/org/apache/poi/poifs/filesystem/
testcases/org/apache/poi/poifs/filesystem/
Author: nick
Date: Mon Jul 6 21:39:42 2015
New Revision: 1689505
URL: http://svn.apache.org/r1689505
Log:
When writing the mini-stream, set the size of it on the root property #58061
Modified:
poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java
poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
Modified: poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java?rev=1689505&r1=1689504&r2=1689505&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java Mon Jul 6 21:39:42 2015
@@ -160,6 +160,7 @@ public class POIFSHeaderDumper {
public static void displayPropertiesSummary(PropertyTable properties) {
System.out.println("Mini Stream starts at " + properties.getRoot().getStartBlock());
+ System.out.println("Mini Stream length is " + properties.getRoot().getSize());
System.out.println();
System.out.println("Properties and their block start:");
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=1689505&r1=1689504&r2=1689505&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 Mon Jul 6 21:39:42 2015
@@ -766,6 +766,10 @@ public class NPOIFSFileSystem extends Bl
* to their backing blocks
*/
private void syncWithDataSource() throws IOException {
+ // Mini Stream + SBATs first, as mini-stream details have
+ // to be stored in the Root Property
+ _mini_store.syncWithDataSource();
+
// Properties
NPOIFSStream propStream = new NPOIFSStream(this, _header.getPropertyStart());
_property_table.preWrite();
@@ -786,9 +790,6 @@ public class NPOIFSFileSystem extends Bl
ByteBuffer block = getBlockAt(bat.getOurBlockIndex());
BlockAllocationTableWriter.writeBlock(bat, block);
}
-
- // SBATs
- _mini_store.syncWithDataSource();
}
/**
Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java?rev=1689505&r1=1689504&r2=1689505&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java Mon Jul 6 21:39:42 2015
@@ -242,12 +242,24 @@ public class NPOIFSMiniStore extends Blo
}
/**
- * Writes the SBATs to their backing blocks
+ * Writes the SBATs to their backing blocks, and updates
+ * the mini-stream size in the properties. Stream size is
+ * based on full blocks used, not the data within the streams
*/
protected void syncWithDataSource() throws IOException {
- for(BATBlock sbat : _sbat_blocks) {
+ int blocksUsed = 0;
+ for (BATBlock sbat : _sbat_blocks) {
ByteBuffer block = _filesystem.getBlockAt(sbat.getOurBlockIndex());
BlockAllocationTableWriter.writeBlock(sbat, block);
+
+ if (!sbat.hasFreeSectors()) {
+ blocksUsed += _filesystem.getBigBlockSizeDetails().getBATEntriesPerBlock();
+ } else {
+ blocksUsed += sbat.getUsedSectors(false);
+ }
}
+ // Set the size on the root in terms of the number of SBAT blocks
+ // RootProperty.setSize does the sbat -> bytes conversion for us
+ _filesystem._get_property_table().getRoot().setSize(blocksUsed);
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java?rev=1689505&r1=1689504&r2=1689505&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java Mon Jul 6 21:39:42 2015
@@ -1428,6 +1428,10 @@ public final class TestNPOIFSFileSystem
emptyDoc = (DocumentEntry)testDir.getEntry("empty-3");
assertContentsMatches(empty, emptyDoc);
+ // Check that a mini-stream was assigned, with one block used
+ assertEquals(3, testDir.getProperty().getStartBlock());
+ assertEquals(64, testDir.getProperty().getSize());
+
// All done
fs.close();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org