If a property refers to an invalid index, log + ignore rather than failing with a IndexOutOfBoundsException

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1782461 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2017-02-10 12:55:55 +00:00
parent 16a825ccf5
commit b6480adb9f

View File

@ -24,6 +24,8 @@ import java.util.Stack;
import org.apache.poi.poifs.filesystem.BATManaged;
import org.apache.poi.poifs.storage.HeaderBlock;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
/**
* This class embodies the Property Table for the filesystem,
@ -33,6 +35,9 @@ import org.apache.poi.poifs.storage.HeaderBlock;
* for the different block schemes as needed.
*/
public abstract class PropertyTableBase implements BATManaged {
private static final POILogger _logger =
POILogFactory.getLogger(PropertyTableBase.class);
private final HeaderBlock _header_block;
protected final List<Property> _properties;
@ -123,17 +128,28 @@ public abstract class PropertyTableBase implements BATManaged {
populatePropertyTree(( DirectoryProperty ) property);
}
index = property.getPreviousChildIndex();
if (Property.isValidIndex(index))
if (isValidIndex(index))
{
children.push(_properties.get(index));
}
index = property.getNextChildIndex();
if (Property.isValidIndex(index))
if (isValidIndex(index))
{
children.push(_properties.get(index));
}
}
}
protected boolean isValidIndex(int index) {
if (! Property.isValidIndex(index))
return false;
if (index < 0 || index >= _properties.size()) {
_logger.log(POILogger.WARN, "Property index " + index +
"outside the valid range 0.."+_properties.size());
return false;
}
return true;
}
/**
* Get the start block for the property table