<changes>
<release version="3.8-beta6" date="2012-??-??">
+ <action dev="poi-developers" type="fix">52446 - Handle files which have been truncated by a few bytes in NPropertyTable</action>
<action dev="poi-developers" type="fix">52438 - Update CellDateFormatter to handle times without seconds</action>
<action dev="poi-developers" type="add">52389 - Support ?/? as well as #/# fractions, and tighten DataFormatter rules for fraction matching</action>
<action dev="poi-developers" type="add">52200 - Updated XWPF table example code </action>
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.poifs.filesystem.NPOIFSStream;
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 a {@link NPOIFSFileSystem};
* filesystem.
*/
public final class NPropertyTable extends PropertyTableBase {
+ private static final POILogger _logger =
+ POILogFactory.getLogger(NPropertyTable.class);
private POIFSBigBlockSize _bigBigBlockSize;
public NPropertyTable(HeaderBlock headerBlock)
data = bb.array();
} else {
data = new byte[bigBlockSize.getBigBlockSize()];
- bb.get(data, 0, data.length);
+
+ int toRead = data.length;
+ if (bb.remaining() < bigBlockSize.getBigBlockSize()) {
+ // Looks to be a truncated block
+ // This isn't allowed, but some third party created files
+ // sometimes do this, and we can normally read anyway
+ _logger.log(POILogger.WARN, "Short Property Block, ", bb.remaining(),
+ " bytes instead of the expected " + bigBlockSize.getBigBlockSize());
+ toRead = bb.remaining();
+ }
+
+ bb.get(data, 0, toRead);
}
PropertyFactory.convertToProperties(data, properties);