mirror of https://github.com/apache/poi.git
[bug-66590] Number of blocks used by the property table missing from the file header. Thanks to Emmanuel Bourg. This closes #728
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921956 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0f42425f8c
commit
8c77000e8d
|
@ -392,7 +392,7 @@ public final class HeaderBlock implements HeaderBlockConstants {
|
||||||
public void writeData(final OutputStream stream) throws IOException {
|
public void writeData(final OutputStream stream) throws IOException {
|
||||||
// Update the counts and start positions
|
// Update the counts and start positions
|
||||||
new IntegerField(_bat_count_offset, _bat_count, _data);
|
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(_property_start_offset, _property_start, _data);
|
||||||
new IntegerField(_sbat_start_offset, _sbat_start, _data);
|
new IntegerField(_sbat_start_offset, _sbat_start, _data);
|
||||||
new IntegerField(_sbat_block_count_offset, _sbat_count, _data);
|
new IntegerField(_sbat_block_count_offset, _sbat_count, _data);
|
||||||
|
|
|
@ -2125,7 +2125,7 @@ final class TestPOIFSStream {
|
||||||
// Check the header has the right points in it
|
// Check the header has the right points in it
|
||||||
assertEquals(1, header.getBATCount());
|
assertEquals(1, header.getBATCount());
|
||||||
assertEquals(1, header.getBATArray()[0]);
|
assertEquals(1, header.getBATArray()[0]);
|
||||||
assertEquals(2, header.getPropertyCount());
|
assertEquals(0, header.getPropertyCount());
|
||||||
assertEquals(0, header.getPropertyStart());
|
assertEquals(0, header.getPropertyStart());
|
||||||
assertEquals(1, header.getSBATCount());
|
assertEquals(1, header.getSBATCount());
|
||||||
assertEquals(21, header.getSBATStart());
|
assertEquals(21, header.getSBATStart());
|
||||||
|
@ -2236,7 +2236,7 @@ final class TestPOIFSStream {
|
||||||
// Will have fat then properties stream
|
// Will have fat then properties stream
|
||||||
assertEquals(1, hdr.getBATCount());
|
assertEquals(1, hdr.getBATCount());
|
||||||
assertEquals(1, hdr.getBATArray()[0]);
|
assertEquals(1, hdr.getBATArray()[0]);
|
||||||
assertEquals(1, hdr.getPropertyCount());
|
assertEquals(0, hdr.getPropertyCount());
|
||||||
assertEquals(0, hdr.getPropertyStart());
|
assertEquals(0, hdr.getPropertyStart());
|
||||||
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getSBATStart());
|
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getSBATStart());
|
||||||
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getXBATIndex());
|
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getXBATIndex());
|
||||||
|
@ -2295,7 +2295,7 @@ final class TestPOIFSStream {
|
||||||
assertEquals(1, hdr.getBATCount());
|
assertEquals(1, hdr.getBATCount());
|
||||||
assertEquals(1, hdr.getBATArray()[0]);
|
assertEquals(1, hdr.getBATArray()[0]);
|
||||||
assertEquals(2, hdr.getSBATStart());
|
assertEquals(2, hdr.getSBATStart());
|
||||||
assertEquals(2, hdr.getPropertyCount());
|
assertEquals(0, hdr.getPropertyCount());
|
||||||
assertEquals(0, hdr.getPropertyStart());
|
assertEquals(0, hdr.getPropertyStart());
|
||||||
assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getXBATIndex());
|
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,
|
* 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
|
* write it out, read it with POIFS, and see the original data
|
||||||
|
|
Loading…
Reference in New Issue