From 9f8d81da5fa06c6782eb3d4354002393a37f2b59 Mon Sep 17 00:00:00 2001 From: Sergey Vladimirov Date: Mon, 11 Jul 2011 18:34:26 +0000 Subject: [PATCH] ignore CHPX references zero-length text pieces git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1145275 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hwpf/model/CHPFormattedDiskPage.java | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/CHPFormattedDiskPage.java b/src/scratchpad/src/org/apache/poi/hwpf/model/CHPFormattedDiskPage.java index 714f0e1c1e..0dd077ad8e 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/CHPFormattedDiskPage.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/CHPFormattedDiskPage.java @@ -74,31 +74,42 @@ public final class CHPFormattedDiskPage extends FormattedDiskPage * This constructs a CHPFormattedDiskPage from a raw fkp (512 byte array * read from a Word file). */ - public CHPFormattedDiskPage( byte[] documentStream, int offset, TextPieceTable tpt, - boolean ignoreChpxWithoutTextPieces ) + public CHPFormattedDiskPage( byte[] documentStream, int offset, + TextPieceTable tpt, boolean ignoreChpxWithoutTextPieces ) { - super(documentStream, offset); + super( documentStream, offset ); - for (int x = 0; x < _crun; x++) - { - int startAt = getStart(x); - int endAt = getEnd(x); - - if (!ignoreChpxWithoutTextPieces || tpt.isIndexInTable( startAt, endAt ) ) - { - _chpxList.add(new CHPX(startAt, endAt, tpt, getGrpprl(x))); - } - else + for ( int x = 0; x < _crun; x++ ) { - logger.log( POILogger.WARN, "CHPX [", - Integer.valueOf( startAt ), "; ", - Integer.valueOf( endAt ), - ") (bytes) doesn't have corresponding text pieces " - + "and will be skipped" ); - - _chpxList.add(null); + int startAt = getStart( x ); + int endAt = getEnd( x ); + + if ( ignoreChpxWithoutTextPieces + && !tpt.isIndexInTable( startAt, endAt ) ) + { + logger.log( POILogger.WARN, "CHPX [", + Integer.valueOf( startAt ), "; ", + Integer.valueOf( endAt ), + ") (bytes) doesn't have corresponding text pieces " + + "and will be skipped" ); + + _chpxList.add( null ); + continue; + } + + CHPX chpx = new CHPX( startAt, endAt, tpt, getGrpprl( x ) ); + + if ( ignoreChpxWithoutTextPieces + && chpx.getStart() == chpx.getEnd() ) + { + logger.log( POILogger.WARN, chpx + + " references zero-length range and will be skipped" ); + _chpxList.add( null ); + continue; + } + + _chpxList.add( chpx ); } - } } public CHPX getCHPX(int index) -- 2.39.5