Author: fanningpj
Date: Tue Nov 19 17:39:09 2024
New Revision: 1921956
URL: http://svn.apache.org/viewvc?rev=1921956&view=rev
Log:
[bug-66590] Number of blocks used by the property table missing from the file
header. Thanks to Emmanuel Bourg. This closes #728
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java?rev=1921956&r1=1921955&r2=1921956&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/HeaderBlock.java
Tue Nov 19 17:39:09 2024
@@ -392,7 +392,7 @@ public final class HeaderBlock implement
public void writeData(final OutputStream stream) throws IOException {
// Update the counts and start positions
new IntegerField(_bat_count_offset, _bat_count, _data);
- new IntegerField(_property_count_offset, _property_count, _data);
+ new IntegerField(_property_count_offset, bigBlockSize.getBigBlockSize()
== 512 ? 0 : _property_count, _data);
new IntegerField(_property_start_offset, _property_start, _data);
new IntegerField(_sbat_start_offset, _sbat_start, _data);
new IntegerField(_sbat_block_count_offset, _sbat_count, _data);
Modified:
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java?rev=1921956&r1=1921955&r2=1921956&view=diff
==============================================================================
---
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
(original)
+++
poi/trunk/poi/src/test/java/org/apache/poi/poifs/filesystem/TestPOIFSStream.java
Tue Nov 19 17:39:09 2024
@@ -2125,7 +2125,7 @@ final class TestPOIFSStream {
// Check the header has the right points in it
assertEquals(1, header.getBATCount());
assertEquals(1, header.getBATArray()[0]);
- assertEquals(2, header.getPropertyCount());
+ assertEquals(0, header.getPropertyCount());
assertEquals(0, header.getPropertyStart());
assertEquals(1, header.getSBATCount());
assertEquals(21, header.getSBATStart());
@@ -2236,7 +2236,7 @@ final class TestPOIFSStream {
// Will have fat then properties stream
assertEquals(1, hdr.getBATCount());
assertEquals(1, hdr.getBATArray()[0]);
- assertEquals(1, hdr.getPropertyCount());
+ assertEquals(0, hdr.getPropertyCount());
assertEquals(0, hdr.getPropertyStart());
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getSBATStart());
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getXBATIndex());
@@ -2295,7 +2295,7 @@ final class TestPOIFSStream {
assertEquals(1, hdr.getBATCount());
assertEquals(1, hdr.getBATArray()[0]);
assertEquals(2, hdr.getSBATStart());
- assertEquals(2, hdr.getPropertyCount());
+ assertEquals(0, hdr.getPropertyCount());
assertEquals(0, hdr.getPropertyStart());
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getXBATIndex());
@@ -2494,6 +2494,38 @@ final class TestPOIFSStream {
}
}
+ /**
+ * Test that the property count is always 0 when writing files with a
block size of 512 bytes.
+ */
+ @Test
+ void testWritePropertyCount512() throws Exception {
+ try (POIFSFileSystem fs = new
POIFSFileSystem(_inst.openResourceAsStream("BlockSize512.zvi"))) {
+ assertEquals(0, fs.getHeaderBlock().getPropertyCount(), "Property
count");
+
+ for (int i = 1; i <= 100; i++) {
+ fs.getRoot().createOrUpdateDocument("Entry " + i, new
ByteArrayInputStream(new byte[8192]));
+ }
+
+ assertEquals(0,
writeOutAndReadBack(fs).getHeaderBlock().getPropertyCount(), "Property count");
+ }
+ }
+
+ /**
+ * Test that the property count is updated when writing files with a block
size of 4096 bytes.
+ */
+ @Test
+ void testWritePropertyCount4096() throws Exception {
+ try (POIFSFileSystem fs = new
POIFSFileSystem(_inst.openResourceAsStream("BlockSize4096.zvi"))) {
+ assertEquals(0, fs.getHeaderBlock().getPropertyCount(), "Property
count");
+
+ for (int i = 1; i <= 100; i++) {
+ fs.getRoot().createOrUpdateDocument("Entry " + i, new
ByteArrayInputStream(new byte[8192]));
+ }
+
+ assertEquals(5,
writeOutAndReadBack(fs).getHeaderBlock().getPropertyCount(), "Property count");
+ }
+ }
+
/**
* Test that we can read a file with POIFS, create a new POIFS instance,
* write it out, read it with POIFS, and see the original data
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]