From 98e93217fef8622f03e234a444998cb44606b487 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Sun, 4 Oct 2015 00:35:30 +0000 Subject: [PATCH] sonar fixes git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1706648 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/hpsf/Section.java | 19 ++- .../poi/poifs/filesystem/BlockStore.java | 6 +- .../poi/poifs/property/NPropertyTable.java | 9 +- .../apache/poi/poifs/storage/BATBlock.java | 10 +- .../formula/functions/AggregateFunction.java | 2 +- .../ss/formula/functions/NumericFunction.java | 2 +- .../poi/ss/usermodel/FractionFormat.java | 9 +- .../org/apache/poi/ss/util/ImageUtils.java | 13 +- src/java/org/apache/poi/util/HexDump.java | 6 +- .../opc/internal/PackagePropertiesPart.java | 12 +- .../poi/xslf/usermodel/XSLFSlideShow.java | 124 +++++++++--------- .../hwpf/converter/AbstractWordConverter.java | 28 ++-- .../hwpf/sprm/CharacterSprmUncompressor.java | 2 +- 13 files changed, 132 insertions(+), 110 deletions(-) diff --git a/src/java/org/apache/poi/hpsf/Section.java b/src/java/org/apache/poi/hpsf/Section.java index 787462c63..b47357210 100644 --- a/src/java/org/apache/poi/hpsf/Section.java +++ b/src/java/org/apache/poi/hpsf/Section.java @@ -150,6 +150,7 @@ public class Section * @exception UnsupportedEncodingException if the section's codepage is not * supported. */ + @SuppressWarnings("unchecked") public Section(final byte[] src, final int offset) throws UnsupportedEncodingException { @@ -332,19 +333,25 @@ public class Section public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } PropertyListEntry other = (PropertyListEntry) obj; - if (id != other.id) + if (id != other.id) { return false; - if (length != other.length) + } + if (length != other.length) { return false; - if (offset != other.offset) + } + if (offset != other.offset) { return false; + } return true; } diff --git a/src/java/org/apache/poi/poifs/filesystem/BlockStore.java b/src/java/org/apache/poi/poifs/filesystem/BlockStore.java index 0ef808227..a56d111f3 100644 --- a/src/java/org/apache/poi/poifs/filesystem/BlockStore.java +++ b/src/java/org/apache/poi/poifs/filesystem/BlockStore.java @@ -80,7 +80,11 @@ public abstract class BlockStore { protected class ChainLoopDetector { private boolean[] used_blocks; protected ChainLoopDetector(long rawSize) { - int numBlocks = (int)Math.ceil( ((double)rawSize) / getBlockStoreBlockSize() ); + int blkSize = getBlockStoreBlockSize(); + int numBlocks = (int)(rawSize / blkSize); + if ((rawSize % blkSize) != 0) { + numBlocks++; + } used_blocks = new boolean[numBlocks]; } protected void claim(int offset) { diff --git a/src/java/org/apache/poi/poifs/property/NPropertyTable.java b/src/java/org/apache/poi/poifs/property/NPropertyTable.java index ec38ddecb..552806408 100644 --- a/src/java/org/apache/poi/poifs/property/NPropertyTable.java +++ b/src/java/org/apache/poi/poifs/property/NPropertyTable.java @@ -119,8 +119,13 @@ public final class NPropertyTable extends PropertyTableBase { */ public int countBlocks() { - int size = _properties.size() * POIFSConstants.PROPERTY_SIZE; - return (int)Math.ceil( ((double)size) / _bigBigBlockSize.getBigBlockSize()); + long rawSize = _properties.size() * POIFSConstants.PROPERTY_SIZE; + int blkSize = _bigBigBlockSize.getBigBlockSize(); + int numBlocks = (int)(rawSize / blkSize); + if ((rawSize % blkSize) != 0) { + numBlocks++; + } + return numBlocks; } /** diff --git a/src/java/org/apache/poi/poifs/storage/BATBlock.java b/src/java/org/apache/poi/poifs/storage/BATBlock.java index 53099644a..b04591dde 100644 --- a/src/java/org/apache/poi/poifs/storage/BATBlock.java +++ b/src/java/org/apache/poi/poifs/storage/BATBlock.java @@ -265,9 +265,10 @@ public final class BATBlock extends BigBlock { public static BATBlockAndIndex getBATBlockAndIndex(final int offset, final HeaderBlock header, final List bats) { POIFSBigBlockSize bigBlockSize = header.getBigBlockSize(); + int entriesPerBlock = bigBlockSize.getBATEntriesPerBlock(); - int whichBAT = (int)Math.floor(offset / bigBlockSize.getBATEntriesPerBlock()); - int index = offset % bigBlockSize.getBATEntriesPerBlock(); + int whichBAT = offset / entriesPerBlock; + int index = offset % entriesPerBlock; return new BATBlockAndIndex( index, bats.get(whichBAT) ); } @@ -279,10 +280,11 @@ public final class BATBlock extends BigBlock { public static BATBlockAndIndex getSBATBlockAndIndex(final int offset, final HeaderBlock header, final List sbats) { POIFSBigBlockSize bigBlockSize = header.getBigBlockSize(); + int entriesPerBlock = bigBlockSize.getBATEntriesPerBlock(); // SBATs are so much easier, as they're chained streams - int whichSBAT = (int)Math.floor(offset / bigBlockSize.getBATEntriesPerBlock()); - int index = offset % bigBlockSize.getBATEntriesPerBlock(); + int whichSBAT = offset / entriesPerBlock; + int index = offset % entriesPerBlock; return new BATBlockAndIndex( index, sbats.get(whichSBAT) ); } diff --git a/src/java/org/apache/poi/ss/formula/functions/AggregateFunction.java b/src/java/org/apache/poi/ss/formula/functions/AggregateFunction.java index 084355d30..644086d31 100644 --- a/src/java/org/apache/poi/ss/formula/functions/AggregateFunction.java +++ b/src/java/org/apache/poi/ss/formula/functions/AggregateFunction.java @@ -115,7 +115,7 @@ public abstract class AggregateFunction extends MultiOperandNumericFunction { double n = (N - 1) * dn + 1; if (n == 1d) { result = StatsLib.kthSmallest(ds, 1); - } else if (n == N) { + } else if (Double.compare(n, N) == 0) { result = StatsLib.kthLargest(ds, 1); } else { int k = (int) n; diff --git a/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java b/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java index 38d800653..72be101ca 100644 --- a/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java +++ b/src/java/org/apache/poi/ss/formula/functions/NumericFunction.java @@ -366,7 +366,7 @@ public abstract class NumericFunction implements Function { double d1 = NumericFunction.singleOperandEvaluate(arg1, srcRowIndex, srcColumnIndex); double logE = Math.log(d0); double base = d1; - if (base == Math.E) { + if (Double.compare(base, Math.E) == 0) { result = logE; } else { result = logE / Math.log(base); diff --git a/src/java/org/apache/poi/ss/usermodel/FractionFormat.java b/src/java/org/apache/poi/ss/usermodel/FractionFormat.java index 202ccdae2..b371c4ec8 100644 --- a/src/java/org/apache/poi/ss/usermodel/FractionFormat.java +++ b/src/java/org/apache/poi/ss/usermodel/FractionFormat.java @@ -24,6 +24,8 @@ import java.util.regex.Pattern; import org.apache.poi.ss.format.SimpleFraction; import org.apache.poi.ss.formula.eval.NotImplementedException; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; /** *

Format class that handles Excel style fractions, such as "# #/#" and "#/###"

@@ -39,7 +41,8 @@ import org.apache.poi.ss.formula.eval.NotImplementedException; @SuppressWarnings("serial") public class FractionFormat extends Format { - private final static Pattern DENOM_FORMAT_PATTERN = Pattern.compile("(?:(#+)|(\\d+))"); + private static final POILogger LOGGER = POILogFactory.getLogger(FractionFormat.class); + private static final Pattern DENOM_FORMAT_PATTERN = Pattern.compile("(?:(#+)|(\\d+))"); //this was chosen to match the earlier limitation of max denom power //it can be expanded to get closer to Excel's calculations @@ -47,7 +50,7 @@ public class FractionFormat extends Format { //but as of this writing, the numerators and denominators //with formats of that nature on very small values were quite //far from Excel's calculations - private final static int MAX_DENOM_POW = 4; + private static final int MAX_DENOM_POW = 4; //there are two options: //a) an exact denominator is specified in the formatString @@ -133,7 +136,7 @@ public class FractionFormat extends Format { fract = SimpleFraction.buildFractionMaxDenominator(decPart, maxDenom); } } catch (RuntimeException e){ - e.printStackTrace(); + LOGGER.log(POILogger.WARN, "Can't format fraction", e); return Double.toString(doubleValue); } diff --git a/src/java/org/apache/poi/ss/util/ImageUtils.java b/src/java/org/apache/poi/ss/util/ImageUtils.java index 2e851416a..16176682a 100644 --- a/src/java/org/apache/poi/ss/util/ImageUtils.java +++ b/src/java/org/apache/poi/ss/util/ImageUtils.java @@ -237,7 +237,7 @@ public class ImageUtils { if (isHSSF) { w *= 1 - anchor.getDx1()/1024d; } else { - w -= anchor.getDx1()/EMU_PER_PIXEL; + w -= anchor.getDx1()/(double)EMU_PER_PIXEL; } while(col2 < anchor.getCol2()){ @@ -247,7 +247,7 @@ public class ImageUtils { if (isHSSF) { w += sheet.getColumnWidthInPixels(col2) * anchor.getDx2()/1024d; } else { - w += anchor.getDx2()/EMU_PER_PIXEL; + w += anchor.getDx2()/(double)EMU_PER_PIXEL; } double h = 0; @@ -257,7 +257,7 @@ public class ImageUtils { if (isHSSF) { h *= 1 - anchor.getDy1()/256d; } else { - h -= anchor.getDy1()/EMU_PER_PIXEL; + h -= anchor.getDy1()/(double)EMU_PER_PIXEL; } while(row2 < anchor.getRow2()){ @@ -267,10 +267,13 @@ public class ImageUtils { if (isHSSF) { h += getRowHeightInPixels(sheet,row2) * anchor.getDy2()/256; } else { - h += anchor.getDy2()/EMU_PER_PIXEL; + h += anchor.getDy2()/(double)EMU_PER_PIXEL; } - return new Dimension((int)w*EMU_PER_PIXEL, (int)h*EMU_PER_PIXEL); + w *= EMU_PER_PIXEL; + h *= EMU_PER_PIXEL; + + return new Dimension((int)Math.rint(w), (int)Math.rint(h)); } diff --git a/src/java/org/apache/poi/util/HexDump.java b/src/java/org/apache/poi/util/HexDump.java index 1357b88f0..7eb8c8506 100644 --- a/src/java/org/apache/poi/util/HexDump.java +++ b/src/java/org/apache/poi/util/HexDump.java @@ -343,21 +343,21 @@ public class HexDump { * @return string of 8 (zero padded) uppercase hex chars and prefixed with '0x' */ public static String intToHex(int value) { - return xpad(value & 0xFFFFFFFF, 8, "0x"); + return xpad(value & 0xFFFFFFFFL, 8, "0x"); } /** * @return string of 4 (zero padded) uppercase hex chars and prefixed with '0x' */ public static String shortToHex(int value) { - return xpad(value & 0xFFFF, 4, "0x"); + return xpad(value & 0xFFFFL, 4, "0x"); } /** * @return string of 2 (zero padded) uppercase hex chars and prefixed with '0x' */ public static String byteToHex(int value) { - return xpad(value & 0xFF, 2, "0x"); + return xpad(value & 0xFFL, 2, "0x"); } private static String xpad(long value, int pad, String prefix) { diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java index 26331fbcc..1d957e5a5 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java @@ -559,20 +559,18 @@ public final class PackagePropertiesPart extends PackagePart implements * @throws InvalidFormatException * Throws if the date format isnot valid. */ - private Nullable setDateValue(String s) throws InvalidFormatException { - if (s == null || s.equals("")) { + private Nullable setDateValue(String dateStr) throws InvalidFormatException { + if (dateStr == null || dateStr.equals("")) { return new Nullable(); } - if (!s.endsWith("Z")) { - s += "Z"; - } + String dateTzStr = dateStr.endsWith("Z") ? dateStr : (dateStr + "Z"); SimpleDateFormat df = new SimpleDateFormat(DEFAULT_DATEFORMAT, Locale.ROOT); df.setTimeZone(LocaleUtil.TIMEZONE_UTC); - Date d = df.parse(s, new ParsePosition(0)); + Date d = df.parse(dateTzStr, new ParsePosition(0)); if (d == null) { df = new SimpleDateFormat(ALTERNATIVE_DATEFORMAT, Locale.ROOT); df.setTimeZone(LocaleUtil.TIMEZONE_UTC); - d = df.parse(s, new ParsePosition(0)); + d = df.parse(dateTzStr, new ParsePosition(0)); } if (d == null) { throw new InvalidFormatException("Date not well formated"); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideShow.java index 6d17cbb4c..79a5bd6d7 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideShow.java @@ -6,7 +6,7 @@ (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -46,90 +46,90 @@ import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument; /** * Experimental class to do low level processing of pptx files. - * + * * Most users should use the higher level {@link XMLSlideShow} instead. - * + * * If you are using these low level classes, then you * will almost certainly need to refer to the OOXML * specifications from * http://www.ecma-international.org/publications/standards/Ecma-376.htm - * + * * WARNING - APIs expected to change rapidly */ public class XSLFSlideShow extends POIXMLDocument { private PresentationDocument presentationDoc; - /** - * The embedded OLE2 files in the OPC package - */ - private List embedds; + /** + * The embedded OLE2 files in the OPC package + */ + private List embedds; - @SuppressWarnings("deprecation") + @SuppressWarnings("deprecation") public XSLFSlideShow(OPCPackage container) throws OpenXML4JException, IOException, XmlException { super(container); - + if(getCorePart().getContentType().equals(XSLFRelation.THEME_MANAGER.getContentType())) { - rebase(getPackage()); + rebase(getPackage()); } - + presentationDoc = PresentationDocument.Factory.parse(getCorePart().getInputStream()); - - embedds = new LinkedList(); - for (CTSlideIdListEntry ctSlide : getSlideReferences().getSldIdArray()) { - PackagePart corePart = getCorePart(); - PackagePart slidePart = corePart.getRelatedPart( - corePart.getRelationship(ctSlide.getId2())); - for(PackageRelationship rel : slidePart.getRelationshipsByType(OLE_OBJECT_REL_TYPE)) - embedds.add(slidePart.getRelatedPart(rel)); // TODO: Add this reference to each slide as well + embedds = new LinkedList(); + for (CTSlideIdListEntry ctSlide : getSlideReferences().getSldIdArray()) { + PackagePart corePart = getCorePart(); + PackagePart slidePart = corePart.getRelatedPart(corePart.getRelationship(ctSlide.getId2())); - for(PackageRelationship rel : slidePart.getRelationshipsByType(PACK_OBJECT_REL_TYPE)) - embedds.add(slidePart.getRelatedPart(rel)); + for(PackageRelationship rel : slidePart.getRelationshipsByType(OLE_OBJECT_REL_TYPE)) { + // TODO: Add this reference to each slide as well + embedds.add(slidePart.getRelatedPart(rel)); + } + + for (PackageRelationship rel : slidePart.getRelationshipsByType(PACK_OBJECT_REL_TYPE)) { + embedds.add(slidePart.getRelatedPart(rel)); + } } } public XSLFSlideShow(String file) throws OpenXML4JException, IOException, XmlException { this(openPackage(file)); } - + /** * Returns the low level presentation base object */ - @Internal + @Internal public CTPresentation getPresentation() { return presentationDoc.getPresentation(); } - + /** * Returns the references from the presentation to its * slides. * You'll need these to figure out the slide ordering, * and to get at the actual slides themselves */ - @Internal + @Internal public CTSlideIdList getSlideReferences() { - if(! getPresentation().isSetSldIdLst()) { - getPresentation().setSldIdLst( - CTSlideIdList.Factory.newInstance() - ); - } - return getPresentation().getSldIdLst(); + if(! getPresentation().isSetSldIdLst()) { + getPresentation().setSldIdLst(CTSlideIdList.Factory.newInstance()); + } + return getPresentation().getSldIdLst(); } - + /** * Returns the references from the presentation to its * slide masters. - * You'll need these to get at the actual slide + * You'll need these to get at the actual slide * masters themselves */ - @Internal + @Internal public CTSlideMasterIdList getSlideMasterReferences() { return getPresentation().getSldMasterIdLst(); } - + public PackagePart getSlideMasterPart(CTSlideMasterIdListEntry master) throws IOException, XmlException { try { - PackagePart corePart = getCorePart(); + PackagePart corePart = getCorePart(); return corePart.getRelatedPart( corePart.getRelationship(master.getId2()) ); @@ -141,7 +141,7 @@ public class XSLFSlideShow extends POIXMLDocument { * Returns the low level slide master object from * the supplied slide master reference */ - @Internal + @Internal public CTSlideMaster getSlideMaster(CTSlideMasterIdListEntry master) throws IOException, XmlException { PackagePart masterPart = getSlideMasterPart(master); SldMasterDocument masterDoc = @@ -151,10 +151,8 @@ public class XSLFSlideShow extends POIXMLDocument { public PackagePart getSlidePart(CTSlideIdListEntry slide) throws IOException, XmlException { try { - PackagePart corePart = getCorePart(); - return corePart.getRelatedPart( - corePart.getRelationship(slide.getId2()) - ); + PackagePart corePart = getCorePart(); + return corePart.getRelatedPart(corePart.getRelationship(slide.getId2())); } catch(InvalidFormatException e) { throw new XmlException(e); } @@ -163,7 +161,7 @@ public class XSLFSlideShow extends POIXMLDocument { * Returns the low level slide object from * the supplied slide reference */ - @Internal + @Internal public CTSlide getSlide(CTSlideIdListEntry slide) throws IOException, XmlException { PackagePart slidePart = getSlidePart(slide); SldDocument slideDoc = @@ -178,13 +176,13 @@ public class XSLFSlideShow extends POIXMLDocument { public PackagePart getNodesPart(CTSlideIdListEntry parentSlide) throws IOException, XmlException { PackageRelationshipCollection notes; PackagePart slidePart = getSlidePart(parentSlide); - + try { notes = slidePart.getRelationshipsByType(XSLFRelation.NOTES.getRelation()); } catch(InvalidFormatException e) { throw new IllegalStateException(e); } - + if(notes.size() == 0) { // No notes for this slide return null; @@ -192,9 +190,9 @@ public class XSLFSlideShow extends POIXMLDocument { if(notes.size() > 1) { throw new IllegalStateException("Expecting 0 or 1 notes for a slide, but found " + notes.size()); } - + try { - return slidePart.getRelatedPart(notes.getRelationship(0)); + return slidePart.getRelatedPart(notes.getRelationship(0)); } catch(InvalidFormatException e) { throw new IllegalStateException(e); } @@ -203,32 +201,32 @@ public class XSLFSlideShow extends POIXMLDocument { * Returns the low level notes object for the given * slide, as found from the supplied slide reference */ - @Internal + @Internal public CTNotesSlide getNotes(CTSlideIdListEntry slide) throws IOException, XmlException { PackagePart notesPart = getNodesPart(slide); if(notesPart == null) return null; - + NotesDocument notesDoc = NotesDocument.Factory.parse(notesPart.getInputStream()); - + return notesDoc.getNotes(); } - + /** * Returns all the comments for the given slide */ - @Internal + @Internal public CTCommentList getSlideComments(CTSlideIdListEntry slide) throws IOException, XmlException { PackageRelationshipCollection commentRels; PackagePart slidePart = getSlidePart(slide); - + try { commentRels = slidePart.getRelationshipsByType(XSLFRelation.COMMENTS.getRelation()); } catch(InvalidFormatException e) { throw new IllegalStateException(e); } - + if(commentRels.size() == 0) { // No comments for this slide return null; @@ -236,12 +234,12 @@ public class XSLFSlideShow extends POIXMLDocument { if(commentRels.size() > 1) { throw new IllegalStateException("Expecting 0 or 1 comments for a slide, but found " + commentRels.size()); } - + try { PackagePart cPart = slidePart.getRelatedPart( commentRels.getRelationship(0) ); - CmLstDocument commDoc = + CmLstDocument commDoc = CmLstDocument.Factory.parse(cPart.getInputStream()); return commDoc.getCmLst(); } catch(InvalidFormatException e) { @@ -249,12 +247,12 @@ public class XSLFSlideShow extends POIXMLDocument { } } - /** - * Get the document's embedded files. - */ - @Override - public List getAllEmbedds() throws OpenXML4JException { - return embedds; - } + /** + * Get the document's embedded files. + */ + @Override + public List getAllEmbedds() throws OpenXML4JException { + return embedds; + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/converter/AbstractWordConverter.java b/src/scratchpad/src/org/apache/poi/hwpf/converter/AbstractWordConverter.java index e8a3dfcf7..02b2dbdaa 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/converter/AbstractWordConverter.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/converter/AbstractWordConverter.java @@ -915,21 +915,23 @@ public abstract class AbstractWordConverter Element currentBlock, Range textRange, int currentTableLevel, String hyperlink ); - protected void processImage( Element currentBlock, boolean inlined, - Picture picture ) - { + protected void processImage( Element currentBlock, boolean inlined, Picture picture ) { PicturesManager fileManager = getPicturesManager(); - if ( fileManager != null ) - { - final int aspectRatioX = picture.getHorizontalScalingFactor(); - final int aspectRatioY = picture.getVerticalScalingFactor(); + if ( fileManager != null ) { + final float aspectRatioX = picture.getHorizontalScalingFactor(); + final float aspectRatioY = picture.getVerticalScalingFactor(); - final float imageWidth = aspectRatioX > 0 ? picture.getDxaGoal() - * aspectRatioX / 1000 / AbstractWordUtils.TWIPS_PER_INCH - : picture.getDxaGoal() / AbstractWordUtils.TWIPS_PER_INCH; - final float imageHeight = aspectRatioY > 0 ? picture.getDyaGoal() - * aspectRatioY / 1000 / AbstractWordUtils.TWIPS_PER_INCH - : picture.getDyaGoal() / AbstractWordUtils.TWIPS_PER_INCH; + float imageWidth = picture.getDxaGoal(); + if (aspectRatioX > 0) { + imageWidth *= aspectRatioX / 1000f; + } + imageWidth /= AbstractWordUtils.TWIPS_PER_INCH; + + float imageHeight = picture.getDyaGoal(); + if (aspectRatioY > 0) { + imageHeight *= aspectRatioY / 1000f; + } + imageHeight /= AbstractWordUtils.TWIPS_PER_INCH; String url = fileManager.savePicture( picture.getContent(), picture.suggestPictureType(), diff --git a/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java b/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java index d3fe6613a..e7ce790f7 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java @@ -381,7 +381,7 @@ public final class CharacterSprmUncompressor extends SprmUncompressor //byte cInc = (byte)(((byte)(param & 0xfe00) >>> 4) >> 1); byte cInc = (byte) ((operand & 0xff00) >>> 8); - cInc = (byte) (cInc >>> 1); + cInc >>>= 1; if (cInc != 0) { newCHP.setHps (Math.max (newCHP.getHps () + (cInc * 2), 2));