<changes>
<release version="3.8-beta5" date="2011-??-??">
+ <action dev="poi-developers" type="fix">50936 - Exception parsing MS Word 8.0 file (as duplicate of 47958)</action>
+ <action dev="poi-developers" type="fix">47958 - ArrayIndexOutOfBoundsException from PicturesTable.getAllPictures() during Escher tree walk</action>
<action dev="poi-developers" type="fix">51944 - PAPFormattedDiskPage.getPAPX - IndexOutOfBounds</action>
<action dev="poi-developers" type="fix">52032 - HWPF - ArrayIndexOutofBoundsException with no stack trace (broken after revision 1178063)</action>
<action dev="poi-developers" type="add">support for converting pptx files into images with a PPTX2PNG tool</action>
import java.util.ArrayList;
import java.util.List;
+import org.apache.poi.util.POILogFactory;
+
+import org.apache.poi.util.POILogger;
+
import org.apache.poi.ddf.DefaultEscherRecordFactory;
import org.apache.poi.ddf.EscherBSERecord;
import org.apache.poi.ddf.EscherBlipRecord;
@Internal
public final class PicturesTable
{
+ private static final POILogger logger = POILogFactory
+ .getLogger( PicturesTable.class );
+
static final int TYPE_IMAGE = 0x08;
static final int TYPE_IMAGE_WORD2000 = 0x00;
static final int TYPE_IMAGE_PASTED_FROM_CLIPBOARD = 0xA;
{
pictures.add(new Picture(blip.getPicturedata()));
}
- else if (bse.getOffset() > 0)
- {
- // Blip stored in delay stream, which in a word doc, is the main stream
- EscherRecordFactory recordFactory = new DefaultEscherRecordFactory();
- EscherRecord record = recordFactory.createRecord(_mainStream, bse.getOffset());
-
- if (record instanceof EscherBlipRecord) {
- record.fillFields(_mainStream, bse.getOffset(), recordFactory);
- blip = (EscherBlipRecord) record;
- pictures.add(new Picture(blip.getPicturedata()));
- }
- }
+ else if ( bse.getOffset() > 0 )
+ {
+ try
+ {
+ // Blip stored in delay stream, which in a word doc, is
+ // the main stream
+ EscherRecordFactory recordFactory = new DefaultEscherRecordFactory();
+ EscherRecord record = recordFactory.createRecord(
+ _mainStream, bse.getOffset() );
+
+ if ( record instanceof EscherBlipRecord )
+ {
+ record.fillFields( _mainStream, bse.getOffset(),
+ recordFactory );
+ blip = (EscherBlipRecord) record;
+ pictures.add( new Picture( blip.getPicturedata() ) );
+ }
+ }
+ catch ( Exception exc )
+ {
+ logger.log(
+ POILogger.WARN,
+ "Unable to load picture from BLIB record at offset #",
+ Integer.valueOf( bse.getOffset() ), exc );
+ }
+ }
}
// Recursive call.
}
/**
- * [FAILING] Bug 47958 - Exception during Escher walk of pictures
+ * Bug 47958 - Exception during Escher walk of pictures
*/
public void test47958()
{
HWPFDocument doc = HWPFTestDataSamples.openSampleFile( "Bug47958.doc" );
- try
- {
- for ( Picture pic : doc.getPicturesTable().getAllPictures() )
- {
- System.out.println( pic.suggestFullFileName() );
- }
- fixed( "47958" );
- }
- catch ( Exception e )
- {
- // expected exception
- }
+ doc.getPicturesTable().getAllPictures();
}
/**
}
/**
- * Bug 50936 - HWPF fails to read a file
+ * Bug 50936 - Exception parsing MS Word 8.0 file
+ */
+ public void test50936_1()
+ {
+ HWPFDocument hwpfDocument = HWPFTestDataSamples
+ .openSampleFile( "Bug50936_1.doc" );
+ hwpfDocument.getPicturesTable().getAllPictures();
+ }
+
+ /**
+ * Bug 50936 - Exception parsing MS Word 8.0 file
+ */
+ public void test50936_2()
+ {
+ HWPFDocument hwpfDocument = HWPFTestDataSamples
+ .openSampleFile( "Bug50936_2.doc" );
+ hwpfDocument.getPicturesTable().getAllPictures();
+ }
+
+ /**
+ * Bug 50936 - Exception parsing MS Word 8.0 file
*/
- public void test50936()
+ public void test50936_3()
{
- HWPFTestDataSamples.openSampleFile( "Bug50936.doc" );
+ HWPFDocument hwpfDocument = HWPFTestDataSamples
+ .openSampleFile( "Bug50936_3.doc" );
+ hwpfDocument.getPicturesTable().getAllPictures();
}
/**