From: PJ Fanning Date: Mon, 15 Apr 2019 16:02:53 +0000 (+0000) Subject: use ArithmeticUtils for calculations that might overflow X-Git-Tag: REL_4_1_1~130 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c56ebe15af2059bacf6e01f71e927b5065ccc197;p=poi.git use ArithmeticUtils for calculations that might overflow git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1857596 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java b/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java index 65c95ffee0..e68f5d9686 100644 --- a/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java +++ b/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java @@ -113,8 +113,8 @@ public class POIFSFileSystem extends BlockStore protected void createNewDataSource() { // Data needs to initially hold just the header block, // a single bat block, and an empty properties section - _data = new ByteArrayBackedDataSource(IOUtils.safelyAllocate( - bigBlockSize.getBigBlockSize() * 3, MAX_RECORD_LENGTH)); + long blockSize = ArithmeticUtils.mulAndCheck((long)bigBlockSize.getBigBlockSize(), (long)3); + _data = new ByteArrayBackedDataSource(IOUtils.safelyAllocate(blockSize, MAX_RECORD_LENGTH)); } /** diff --git a/src/java/org/apache/poi/ss/util/cellwalk/CellWalk.java b/src/java/org/apache/poi/ss/util/cellwalk/CellWalk.java index fe1605ce30..9ab0e530fc 100644 --- a/src/java/org/apache/poi/ss/util/cellwalk/CellWalk.java +++ b/src/java/org/apache/poi/ss/util/cellwalk/CellWalk.java @@ -17,6 +17,7 @@ package org.apache.poi.ss.util.cellwalk; +import org.apache.commons.math3.util.ArithmeticUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; @@ -91,9 +92,10 @@ public class CellWalk { continue; } - ctx.ordinalNumber = - (ctx.rowNumber - firstRow) * width + - (ctx.colNumber - firstColumn + 1); + long rowSize = ArithmeticUtils.mulAndCheck( + (long)ArithmeticUtils.subAndCheck(ctx.rowNumber, firstRow), (long)width); + + ctx.ordinalNumber = ArithmeticUtils.addAndCheck(rowSize, (ctx.colNumber - firstColumn + 1)); handler.onCell(currentCell, ctx); } diff --git a/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java b/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java index ba27d73d84..d754a10b3c 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java +++ b/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.apache.commons.math3.util.ArithmeticUtils; import org.apache.poi.hslf.model.textproperties.IndentProp; import org.apache.poi.util.IOUtils; import org.apache.poi.util.LittleEndian; @@ -113,7 +114,8 @@ public final class MasterTextPropAtom extends RecordAtom { */ private void write() { int pos = 0; - _data = IOUtils.safelyAllocate(indents.size()*6, MAX_RECORD_LENGTH); + long newSize = ArithmeticUtils.mulAndCheck((long)indents.size(), (long)6); + _data = IOUtils.safelyAllocate(newSize, MAX_RECORD_LENGTH); for (IndentProp prop : indents) { LittleEndian.putInt(_data, pos, prop.getCharactersCovered()); LittleEndian.putShort(_data, pos+4, (short)prop.getIndentLevel());