temporary(?) workaround for Bug 49933 - Word 6/95 documents with sections cause ArrayIndexOutOfBoundsException

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1144683 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sergey Vladimirov 2011-07-09 15:33:41 +00:00
parent 530a209d01
commit f23c8a021a
2 changed files with 49 additions and 30 deletions

View File

@ -19,45 +19,59 @@ package org.apache.poi.hwpf.model;
import org.apache.poi.hwpf.sprm.SectionSprmCompressor;
import org.apache.poi.hwpf.sprm.SectionSprmUncompressor;
import org.apache.poi.hwpf.sprm.SprmBuffer;
import org.apache.poi.hwpf.usermodel.SectionProperties;
/**
*/
public final class SEPX extends BytePropertyNode<SEPX>
{
SectionDescriptor _sed;
SectionProperties sectionProperties;
public SEPX(SectionDescriptor sed, int start, int end, CharIndexTranslator translator, byte[] grpprl)
{
super(start, end, translator, SectionSprmUncompressor.uncompressSEP(grpprl, 0));
_sed = sed;
}
SectionDescriptor _sed;
public byte[] getGrpprl()
{
return SectionSprmCompressor.compressSectionProperty((SectionProperties)_buf);
}
public SectionDescriptor getSectionDescriptor()
{
return _sed;
}
public SectionProperties getSectionProperties()
{
return (SectionProperties)_buf;
}
public boolean equals(Object o)
{
SEPX sepx = (SEPX)o;
if (super.equals(o))
public SEPX( SectionDescriptor sed, int start, int end,
CharIndexTranslator translator, byte[] grpprl )
{
return sepx._sed.equals(_sed);
super( start, end, translator, new SprmBuffer( grpprl ) );
_sed = sed;
}
public byte[] getGrpprl()
{
if ( sectionProperties != null )
{
byte[] grpprl = SectionSprmCompressor
.compressSectionProperty( sectionProperties );
_buf = new SprmBuffer( grpprl );
}
return ( (SprmBuffer) _buf ).toByteArray();
}
public SectionDescriptor getSectionDescriptor()
{
return _sed;
}
public SectionProperties getSectionProperties()
{
if ( sectionProperties == null )
{
sectionProperties = SectionSprmUncompressor.uncompressSEP(
( (SprmBuffer) _buf ).toByteArray(), 0 );
}
return sectionProperties;
}
public boolean equals( Object o )
{
SEPX sepx = (SEPX) o;
if ( super.equals( o ) )
{
return sepx._sed.equals( _sed );
}
return false;
}
return false;
}
public String toString()
{

View File

@ -793,6 +793,11 @@ public final class TestProblems extends HWPFTestCase {
}
}
public void test49933()
{
HWPFTestDataSamples.openOldSampleFile( "Bug49933.doc" );
}
/**
* Bug 50936 - HWPF fails to read a file
*/