Browse Source

Fix bug #52446 - Handle files which have been truncated by a few bytes in NPropertyTable

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1229963 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_8_FINAL
Nick Burch 12 years ago
parent
commit
ee24b94d80

+ 1
- 0
src/documentation/content/xdocs/status.xml View File

@@ -34,6 +34,7 @@

<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>

+ 16
- 1
src/java/org/apache/poi/poifs/property/NPropertyTable.java View File

@@ -29,6 +29,8 @@ import org.apache.poi.poifs.common.POIFSConstants;
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};
@@ -36,6 +38,8 @@ import org.apache.poi.poifs.storage.HeaderBlock;
* filesystem.
*/
public final class NPropertyTable extends PropertyTableBase {
private static final POILogger _logger =
POILogFactory.getLogger(NPropertyTable.class);
private POIFSBigBlockSize _bigBigBlockSize;

public NPropertyTable(HeaderBlock headerBlock)
@@ -90,7 +94,18 @@ public final class NPropertyTable extends PropertyTableBase {
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);

Loading…
Cancel
Save