From b6480adb9f937505f18e418238904cd6fa3f1d12 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 10 Feb 2017 12:55:55 +0000 Subject: [PATCH] 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 --- .../poi/poifs/property/PropertyTableBase.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/poi/poifs/property/PropertyTableBase.java b/src/java/org/apache/poi/poifs/property/PropertyTableBase.java index 477cf036d..82f57bf72 100644 --- a/src/java/org/apache/poi/poifs/property/PropertyTableBase.java +++ b/src/java/org/apache/poi/poifs/property/PropertyTableBase.java @@ -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 _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