mirror of https://github.com/apache/poi.git
Fix 47958 - ArrayIndexOutOfBoundsException from PicturesTable.getAllPictures() during Escher tree walk
Fix 50936 - Exception parsing MS Word 8.0 file (as duplicate of 47958) git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1195080 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2ac2e79652
commit
16ff31e5ad
|
@ -34,6 +34,8 @@
|
||||||
|
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.8-beta5" date="2011-??-??">
|
<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">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="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>
|
<action dev="poi-developers" type="add">support for converting pptx files into images with a PPTX2PNG tool</action>
|
||||||
|
|
|
@ -20,6 +20,10 @@ package org.apache.poi.hwpf.model;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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.DefaultEscherRecordFactory;
|
||||||
import org.apache.poi.ddf.EscherBSERecord;
|
import org.apache.poi.ddf.EscherBSERecord;
|
||||||
import org.apache.poi.ddf.EscherBlipRecord;
|
import org.apache.poi.ddf.EscherBlipRecord;
|
||||||
|
@ -52,6 +56,9 @@ import org.apache.poi.util.LittleEndian;
|
||||||
@Internal
|
@Internal
|
||||||
public final class PicturesTable
|
public final class PicturesTable
|
||||||
{
|
{
|
||||||
|
private static final POILogger logger = POILogFactory
|
||||||
|
.getLogger( PicturesTable.class );
|
||||||
|
|
||||||
static final int TYPE_IMAGE = 0x08;
|
static final int TYPE_IMAGE = 0x08;
|
||||||
static final int TYPE_IMAGE_WORD2000 = 0x00;
|
static final int TYPE_IMAGE_WORD2000 = 0x00;
|
||||||
static final int TYPE_IMAGE_PASTED_FROM_CLIPBOARD = 0xA;
|
static final int TYPE_IMAGE_PASTED_FROM_CLIPBOARD = 0xA;
|
||||||
|
@ -175,18 +182,32 @@ public final class PicturesTable
|
||||||
{
|
{
|
||||||
pictures.add(new Picture(blip.getPicturedata()));
|
pictures.add(new Picture(blip.getPicturedata()));
|
||||||
}
|
}
|
||||||
else if (bse.getOffset() > 0)
|
else if ( bse.getOffset() > 0 )
|
||||||
{
|
{
|
||||||
// Blip stored in delay stream, which in a word doc, is the main stream
|
try
|
||||||
EscherRecordFactory recordFactory = new DefaultEscherRecordFactory();
|
{
|
||||||
EscherRecord record = recordFactory.createRecord(_mainStream, bse.getOffset());
|
// 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) {
|
if ( record instanceof EscherBlipRecord )
|
||||||
record.fillFields(_mainStream, bse.getOffset(), recordFactory);
|
{
|
||||||
blip = (EscherBlipRecord) record;
|
record.fillFields( _mainStream, bse.getOffset(),
|
||||||
pictures.add(new Picture(blip.getPicturedata()));
|
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.
|
// Recursive call.
|
||||||
|
|
|
@ -463,23 +463,12 @@ public class TestBugs extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [FAILING] Bug 47958 - Exception during Escher walk of pictures
|
* Bug 47958 - Exception during Escher walk of pictures
|
||||||
*/
|
*/
|
||||||
public void test47958()
|
public void test47958()
|
||||||
{
|
{
|
||||||
HWPFDocument doc = HWPFTestDataSamples.openSampleFile( "Bug47958.doc" );
|
HWPFDocument doc = HWPFTestDataSamples.openSampleFile( "Bug47958.doc" );
|
||||||
try
|
doc.getPicturesTable().getAllPictures();
|
||||||
{
|
|
||||||
for ( Picture pic : doc.getPicturesTable().getAllPictures() )
|
|
||||||
{
|
|
||||||
System.out.println( pic.suggestFullFileName() );
|
|
||||||
}
|
|
||||||
fixed( "47958" );
|
|
||||||
}
|
|
||||||
catch ( Exception e )
|
|
||||||
{
|
|
||||||
// expected exception
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -513,11 +502,33 @@ public class TestBugs extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bug 50936 - HWPF fails to read a file
|
* Bug 50936 - Exception parsing MS Word 8.0 file
|
||||||
*/
|
*/
|
||||||
public void test50936()
|
public void test50936_1()
|
||||||
{
|
{
|
||||||
HWPFTestDataSamples.openSampleFile( "Bug50936.doc" );
|
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_3()
|
||||||
|
{
|
||||||
|
HWPFDocument hwpfDocument = HWPFTestDataSamples
|
||||||
|
.openSampleFile( "Bug50936_3.doc" );
|
||||||
|
hwpfDocument.getPicturesTable().getAllPictures();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue