import org.apache.poi.util.LittleEndianConsts;
import org.apache.poi.util.LittleEndianInputStream;
import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
import org.apache.poi.util.RecordFormatException;
/**
*/
@Internal
public class HemfComment {
+ private static final POILogger logger = POILogFactory.getLogger(HemfComment.class);
private static final int MAX_RECORD_LENGTH = HwmfPicture.MAX_RECORD_LENGTH;
public enum HemfCommentRecordType {
wmfData = IOUtils.safelyAllocate(winMetafileSize, MAX_RECORD_LENGTH);
// some emf comments are truncated, so we don't use readFully here
- leis.read(wmfData);
+ int readBytes = leis.read(wmfData);
+ if (readBytes < wmfData.length) {
+ logger.log(POILogger.INFO, "Emf comment with WMF: expected "+wmfData.length+
+ " bytes - received only "+readBytes+" bytes.");
+ }
return leis.getReadIndex()-startIdx;
}
package org.apache.poi.hemf.usermodel;
-import java.awt.Transparency;
-import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
-import java.awt.image.ComponentColorModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.PixelInterleavedSampleModel;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayDeque;
import org.apache.poi.hemf.record.emf.HemfRecord;
import org.apache.poi.hemf.record.emfplus.HemfPlusImage.EmfPlusBitmapDataType;
import org.apache.poi.hemf.record.emfplus.HemfPlusImage.EmfPlusImage;
-import org.apache.poi.hemf.record.emfplus.HemfPlusImage.EmfPlusPixelFormat;
import org.apache.poi.hemf.record.emfplus.HemfPlusObject;
import org.apache.poi.hemf.record.emfplus.HemfPlusObject.EmfPlusObject;
import org.apache.poi.hwmf.record.HwmfBitmapDib;
EmfPlusImage img = epo.getObjectData();
assert(img.getImageDataType() != null);
- HwmfEmbedded emb = getEmfPlusImageData();
+ final HwmfEmbedded emb = getEmfPlusImageData();
+ if (emb == null) {
+ return null;
+ }
- HwmfEmbeddedType et;
+ final HwmfEmbeddedType et;
switch (img.getImageDataType()) {
case BITMAP:
if (img.getBitmapType() == EmfPlusBitmapDataType.COMPRESSED) {
int byteCount = leis.readUShort();
int size = 2*LittleEndianConsts.SHORT_SIZE;
- escapeData = escapeFunction.constructor.get();
+ escapeData = (escapeFunction == null) ? new WmfEscapeUnknownData() : escapeFunction.constructor.get();
size += escapeData.init(leis, byteCount, escapeFunction);
return size;