Fix the block allocation test, but still leave the recent blocks hssf bug fixed
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@758353 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
579a4b95a4
commit
46590f58a1
@ -186,6 +186,7 @@ public class BlockAllocationTableReader
|
|||||||
List blocks = new ArrayList();
|
List blocks = new ArrayList();
|
||||||
int currentBlock = startBlock;
|
int currentBlock = startBlock;
|
||||||
boolean firstPass = true;
|
boolean firstPass = true;
|
||||||
|
ListManagedBlock dataBlock = null;
|
||||||
|
|
||||||
// Process the chain from the start to the end
|
// Process the chain from the start to the end
|
||||||
// Normally we have header, data, end
|
// Normally we have header, data, end
|
||||||
@ -193,16 +194,21 @@ public class BlockAllocationTableReader
|
|||||||
// For those cases, stop at the header, not the end
|
// For those cases, stop at the header, not the end
|
||||||
while (currentBlock != POIFSConstants.END_OF_CHAIN) {
|
while (currentBlock != POIFSConstants.END_OF_CHAIN) {
|
||||||
try {
|
try {
|
||||||
blocks.add(blockList.remove(currentBlock));
|
// Grab the data at the current block offset
|
||||||
|
dataBlock = blockList.remove(currentBlock);
|
||||||
|
blocks.add(dataBlock);
|
||||||
|
// Now figure out which block we go to next
|
||||||
currentBlock = _entries.get(currentBlock);
|
currentBlock = _entries.get(currentBlock);
|
||||||
|
firstPass = false;
|
||||||
} catch(IOException e) {
|
} catch(IOException e) {
|
||||||
if(currentBlock == headerPropertiesStartBlock) {
|
if(currentBlock == headerPropertiesStartBlock) {
|
||||||
// Special case where things are in the wrong order
|
// Special case where things are in the wrong order
|
||||||
System.err.println("Warning, header block comes after data blocks in POIFS block listing");
|
System.err.println("Warning, header block comes after data blocks in POIFS block listing");
|
||||||
currentBlock = POIFSConstants.END_OF_CHAIN;
|
currentBlock = POIFSConstants.END_OF_CHAIN;
|
||||||
} else if(currentBlock == 0) {
|
} else if(currentBlock == 0 && firstPass) {
|
||||||
// Special case where the termination isn't done right
|
// Special case where the termination isn't done right
|
||||||
System.err.println("Warning, incorrectly terminated data blocks in POIFS block listing (should end at -2, ended at 0)");
|
// on an empty set
|
||||||
|
System.err.println("Warning, incorrectly terminated empty data blocks in POIFS block listing (should end at -2, ended at 0)");
|
||||||
currentBlock = POIFSConstants.END_OF_CHAIN;
|
currentBlock = POIFSConstants.END_OF_CHAIN;
|
||||||
} else {
|
} else {
|
||||||
// Ripple up
|
// Ripple up
|
||||||
@ -212,7 +218,7 @@ public class BlockAllocationTableReader
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ( ListManagedBlock [] ) blocks
|
return ( ListManagedBlock [] ) blocks
|
||||||
.toArray(new ListManagedBlock[ 0 ]);
|
.toArray(new ListManagedBlock[ blocks.size() ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// methods for debugging reader
|
// methods for debugging reader
|
||||||
|
@ -1329,7 +1329,7 @@ public class TestBlockAllocationTableReader
|
|||||||
|
|
||||||
if (expected_length[ j ] == -1)
|
if (expected_length[ j ] == -1)
|
||||||
{
|
{
|
||||||
fail("document " + j + " should have failed");
|
fail("document " + j + " should have failed, but found a length of " + dataBlocks.length);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user