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.filesystem.BATManaged;
import org.apache.poi.poifs.storage.HeaderBlock; 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, * 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. * for the different block schemes as needed.
*/ */
public abstract class PropertyTableBase implements BATManaged { public abstract class PropertyTableBase implements BATManaged {
private static final POILogger _logger =
POILogFactory.getLogger(PropertyTableBase.class);
private final HeaderBlock _header_block; private final HeaderBlock _header_block;
protected final List<Property> _properties; protected final List<Property> _properties;
@ -123,18 +128,29 @@ public abstract class PropertyTableBase implements BATManaged {
populatePropertyTree(( DirectoryProperty ) property); populatePropertyTree(( DirectoryProperty ) property);
} }
index = property.getPreviousChildIndex(); index = property.getPreviousChildIndex();
if (Property.isValidIndex(index)) if (isValidIndex(index))
{ {
children.push(_properties.get(index)); children.push(_properties.get(index));
} }
index = property.getNextChildIndex(); index = property.getNextChildIndex();
if (Property.isValidIndex(index)) if (isValidIndex(index))
{ {
children.push(_properties.get(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 * Get the start block for the property table
* *