This is an automated email from the ASF dual-hosted git repository.
pjfanning pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/poi.git
The following commit(s) were added to refs/heads/trunk by this push:
new 2344a81268 more int overflow risks (#1101)
2344a81268 is described below
commit 2344a81268b111aeb29c3e35188238643c2f7122
Author: PJ Fanning <[email protected]>
AuthorDate: Mon Jun 1 22:51:10 2026 +0100
more int overflow risks (#1101)
* more int overflow risks
* some reverts due to test issues
* try to fix skip issues
* Update poi-integration-exceptions.csv
---
.../org/apache/poi/xslf/usermodel/XSLFPictureShape.java | 5 ++++-
.../org/apache/poi/xssf/model/ExternalLinksTable.java | 2 +-
.../src/main/java/org/apache/poi/xssf/model/MapInfo.java | 4 ++--
.../java/org/apache/poi/xssf/streaming/SXSSFSheet.java | 3 ++-
.../java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java | 9 +++++----
.../java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java | 15 +++++++++------
.../main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java | 2 +-
.../java/org/apache/poi/hemf/draw/HemfImageRenderer.java | 6 +++++-
.../java/org/apache/poi/hemf/record/emf/HemfComment.java | 2 +-
.../java/org/apache/poi/hemf/record/emf/HemfHeader.java | 4 ++--
.../apache/poi/hemf/record/emf/HemfRecordIterator.java | 2 +-
.../java/org/apache/poi/hpbf/model/QuillContents.java | 4 ++--
.../src/main/java/org/apache/poi/hslf/blip/Bitmap.java | 5 +++--
.../src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java | 10 +++++-----
.../org/apache/poi/hslf/dev/SlideShowRecordDumper.java | 2 +-
.../main/java/org/apache/poi/hslf/record/SlideAtom.java | 2 +-
.../java/org/apache/poi/util/LittleEndianInputStream.java | 11 +++++++++++
test-data/poi-integration-exceptions.csv | 2 +-
18 files changed, 57 insertions(+), 33 deletions(-)
diff --git
a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
index aec5faccf6..b429a22ad2 100644
---
a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
+++
b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
@@ -45,6 +45,7 @@ import org.apache.poi.sl.usermodel.PictureData.PictureType;
import org.apache.poi.sl.usermodel.PictureShape;
import org.apache.poi.sl.usermodel.Placeholder;
import org.apache.poi.util.Beta;
+import org.apache.poi.util.MathUtil;
import org.apache.poi.util.Units;
import org.apache.poi.xslf.draw.SVGImageRenderer;
import org.apache.xmlbeans.XmlCursor;
@@ -372,7 +373,9 @@ public class XSLFPictureShape extends XSLFSimpleShape
Dimension2D dim = renderer.getDimension();
Rectangle2D anc = (anchor != null) ? anchor
- : new Rectangle2D.Double(0,0,
Units.pixelToPoints((int)dim.getWidth()),
Units.pixelToPoints((int)dim.getHeight()));
+ : new Rectangle2D.Double(0,0,
+ Units.pixelToPoints(MathUtil.safeDoubleToInt(dim.getWidth())),
+
Units.pixelToPoints(MathUtil.safeDoubleToInt(dim.getHeight())));
PictureType pt = (previewType != null) ? previewType : PictureType.PNG;
if (pt != PictureType.JPEG && pt != PictureType.GIF && pt !=
PictureType.PNG) {
diff --git
a/poi-ooxml/src/main/java/org/apache/poi/xssf/model/ExternalLinksTable.java
b/poi-ooxml/src/main/java/org/apache/poi/xssf/model/ExternalLinksTable.java
index 89b2b87e29..37bc7f2872 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xssf/model/ExternalLinksTable.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/model/ExternalLinksTable.java
@@ -257,7 +257,7 @@ public class ExternalLinksTable extends POIXMLDocumentPart {
@Override
public int getSheetIndex() {
if (name.isSetSheetId()) {
- return (int)name.getSheetId();
+ return Math.toIntExact(name.getSheetId());
}
return -1;
}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/model/MapInfo.java
b/poi-ooxml/src/main/java/org/apache/poi/xssf/model/MapInfo.java
index 46eee39c36..20bde4c85a 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xssf/model/MapInfo.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/model/MapInfo.java
@@ -75,7 +75,7 @@ public class MapInfo extends POIXMLDocumentPart {
maps= new HashMap<>();
for(CTMap map :mapInfo.getMapArray()){
- maps.put((int)map.getID(), new XSSFMap(map,this));
+ maps.put(Math.toIntExact(map.getID()), new XSSFMap(map,this));
}
} catch (XmlException e) {
@@ -127,7 +127,7 @@ public class MapInfo extends POIXMLDocumentPart {
XSSFMap matchedMap = null;
- for(XSSFMap map :maps.values()){
+ for(XSSFMap map : maps.values()){
if(map.getCtMap().getName()!=null &&
map.getCtMap().getName().equals(name)){
matchedMap = map;
}
diff --git
a/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
b/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
index 9ac5399f45..b86f935025 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
@@ -30,6 +30,7 @@ import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.PaneInformation;
import org.apache.poi.ss.util.SheetUtil;
import org.apache.poi.util.Internal;
+import org.apache.poi.util.MathUtil;
import org.apache.poi.util.NotImplemented;
import org.apache.poi.util.Removal;
import org.apache.poi.xssf.usermodel.*;
@@ -1667,7 +1668,7 @@ public class SXSSFSheet implements Sheet,
OoxmlSheetExtensions {
// get the best-fit width of rows currently in the random access window
final double w1 = SheetUtil.getColumnWidth(this, column,
useMergedCells);
- final int activeWidth = (int) ((256 * w1) + getArbitraryExtraWidth());
+ final int activeWidth = MathUtil.safeDoubleToInt((256 * w1) +
getArbitraryExtraWidth());
// the best-fit width for both flushed rows and random access window
rows
// flushedWidth or activeWidth may be negative if column contains only
blank cells
diff --git
a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
index 9261589152..5a0ddfbbc3 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
@@ -34,6 +34,7 @@ import org.apache.poi.ss.usermodel.ReadingOrder;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellUtil;
import org.apache.poi.util.Internal;
+import org.apache.poi.util.MathUtil;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.model.ThemesTable;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellAlignment;
@@ -369,7 +370,7 @@ public class XSSFCellStyle implements CellStyle,
Duplicatable {
// bug 56295: handle missing applyFill attribute as "true" because
Excel does as well
if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return null;
- int fillIndex = (int)_cellXf.getFillId();
+ int fillIndex = Math.toIntExact(_cellXf.getFillId());
XSSFCellFill fg = _stylesSource.getFillAt(fillIndex);
XSSFColor fillBackgroundColor = fg.getFillBackgroundColor();
@@ -408,7 +409,7 @@ public class XSSFCellStyle implements CellStyle,
Duplicatable {
// bug 56295: handle missing applyFill attribute as "true" because
Excel does as well
if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return null;
- int fillIndex = (int)_cellXf.getFillId();
+ int fillIndex = Math.toIntExact(_cellXf.getFillId());
XSSFCellFill fg = _stylesSource.getFillAt(fillIndex);
XSSFColor fillForegroundColor = fg.getFillForegroundColor();
@@ -423,7 +424,7 @@ public class XSSFCellStyle implements CellStyle,
Duplicatable {
// bug 56295: handle missing applyFill attribute as "true" because
Excel does as well
if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return
FillPatternType.NO_FILL;
- int fillIndex = (int)_cellXf.getFillId();
+ int fillIndex = MathUtil.safeDoubleToInt(_cellXf.getFillId());
XSSFCellFill fill = _stylesSource.getFillAt(fillIndex);
STPatternType.Enum ptrn = fill.getPatternType();
@@ -935,7 +936,7 @@ public class XSSFCellStyle implements CellStyle,
Duplicatable {
CTFill ct;
// bug 56295: handle missing applyFill attribute as "true" because
Excel does as well
if(!_cellXf.isSetApplyFill() || _cellXf.getApplyFill()) {
- int fillIndex = (int)_cellXf.getFillId();
+ int fillIndex = MathUtil.safeDoubleToInt(_cellXf.getFillId());
XSSFCellFill cf = _stylesSource.getFillAt(fillIndex);
ct = (CTFill)cf.getCTFill().copy();
diff --git
a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
index 680fe2433d..62c81e1e81 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
@@ -25,6 +25,7 @@ import java.util.function.Function;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.ooxml.util.POIXMLUnits;
import org.apache.poi.util.Internal;
+import org.apache.poi.util.MathUtil;
import org.apache.poi.util.Units;
import org.apache.poi.wp.usermodel.Paragraph;
import org.apache.xmlbeans.XmlCursor;
@@ -932,7 +933,8 @@ public class XWPFParagraph implements IBodyElement,
IRunBody, ISDTContents, Para
*/
public int getSpacingAfter() {
CTSpacing spacing = getCTSpacing(false);
- return (spacing != null && spacing.isSetAfter()) ?
(int)Units.toDXA(POIXMLUnits.parseLength(spacing.xgetAfter())) : -1;
+ return (spacing != null && spacing.isSetAfter()) ?
+
MathUtil.safeDoubleToInt(Units.toDXA(POIXMLUnits.parseLength(spacing.xgetAfter())))
: -1;
}
/**
@@ -998,7 +1000,8 @@ public class XWPFParagraph implements IBodyElement,
IRunBody, ISDTContents, Para
*/
public int getSpacingBefore() {
CTSpacing spacing = getCTSpacing(false);
- return (spacing != null && spacing.isSetBefore()) ?
(int)Units.toDXA(POIXMLUnits.parseLength(spacing.xgetBefore())) : -1;
+ return (spacing != null && spacing.isSetBefore()) ?
+
MathUtil.safeDoubleToInt(Units.toDXA(POIXMLUnits.parseLength(spacing.xgetBefore())))
: -1;
}
/**
@@ -1146,7 +1149,7 @@ public class XWPFParagraph implements IBodyElement,
IRunBody, ISDTContents, Para
public int getIndentationLeft() {
CTInd indentation = getCTInd(false);
return (indentation != null && indentation.isSetLeft())
- ? (int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetLeft()))
+ ?
MathUtil.safeDoubleToInt(Units.toDXA(POIXMLUnits.parseLength(indentation.xgetLeft())))
: -1;
}
@@ -1212,7 +1215,7 @@ public class XWPFParagraph implements IBodyElement,
IRunBody, ISDTContents, Para
public int getIndentationRight() {
CTInd indentation = getCTInd(false);
return (indentation != null && indentation.isSetRight())
- ?
(int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetRight()))
+ ?
MathUtil.safeDoubleToInt(Units.toDXA(POIXMLUnits.parseLength(indentation.xgetRight())))
: -1;
}
@@ -1277,7 +1280,7 @@ public class XWPFParagraph implements IBodyElement,
IRunBody, ISDTContents, Para
public int getIndentationHanging() {
CTInd indentation = getCTInd(false);
return (indentation != null && indentation.isSetHanging())
- ?
(int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetHanging())) : -1;
+ ?
MathUtil.safeDoubleToInt(Units.toDXA(POIXMLUnits.parseLength(indentation.xgetHanging())))
: -1;
}
/**
@@ -1318,7 +1321,7 @@ public class XWPFParagraph implements IBodyElement,
IRunBody, ISDTContents, Para
public int getIndentationFirstLine() {
CTInd indentation = getCTInd(false);
return (indentation != null && indentation.isSetFirstLine())
- ?
(int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetFirstLine()))
+ ?
MathUtil.safeDoubleToInt(Units.toDXA(POIXMLUnits.parseLength(indentation.xgetFirstLine())))
: -1;
}
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
index 687c518162..9fc06c8c00 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
@@ -807,7 +807,7 @@ public class XWPFRun implements ISDTContents, IRunElement,
CharacterRun {
if (pr == null || pr.sizeOfKernArray() == 0) {
return 0;
}
- return (int)POIXMLUnits.parseLength(pr.getKernArray(0).xgetVal());
+ return
Math.toIntExact(POIXMLUnits.parseLength(pr.getKernArray(0).xgetVal()));
}
@Override
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
index 27efbe18a9..cf348154f0 100644
---
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
+++
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/draw/HemfImageRenderer.java
@@ -39,6 +39,7 @@ import org.apache.poi.sl.draw.Drawable;
import org.apache.poi.sl.draw.EmbeddedExtractor;
import org.apache.poi.sl.draw.ImageRenderer;
import org.apache.poi.sl.usermodel.PictureData;
+import org.apache.poi.util.MathUtil;
import org.apache.poi.util.Units;
@SuppressWarnings("unused")
@@ -84,7 +85,10 @@ public class HemfImageRenderer implements ImageRenderer,
EmbeddedExtractor {
return new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
}
- BufferedImage bufImg = new BufferedImage((int)dim.getWidth(),
(int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
+ BufferedImage bufImg = new BufferedImage(
+ MathUtil.safeDoubleToInt(dim.getWidth()),
+ MathUtil.safeDoubleToInt(dim.getHeight()),
+ BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bufImg.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfComment.java
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfComment.java
index ff9d0f48a9..2aeaa3716c 100644
---
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfComment.java
+++
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfComment.java
@@ -247,7 +247,7 @@ public class HemfComment {
final EmfCommentData record = commentType.constructor.get();
long readBytes = record.init(leis, dataSize);
- final int skipBytes = Math.toIntExact(recordSize-4-readBytes);
+ final long skipBytes = recordSize-4-readBytes;
assert (skipBytes >= 0);
leis.skipFully(skipBytes);
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfHeader.java
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfHeader.java
index 01b43d613f..3ecb2eed84 100644
---
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfHeader.java
+++
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfHeader.java
@@ -175,8 +175,8 @@ public class HemfHeader implements HemfRecord {
}
int maxDescriptionLength = Math.toIntExact(Math.min(recordSize,
Integer.MAX_VALUE));
IOUtils.safelyAllocateCheck(descriptionBytes,
maxDescriptionLength);
- leis.mark((int)(skip + descriptionBytes));
- leis.skipFully((int)skip);
+ leis.mark(Math.toIntExact(skip + descriptionBytes));
+ leis.skipFully(skip);
byte[] buf = IOUtils.safelyAllocate(descriptionBytes,
maxDescriptionLength);
leis.readFully(buf);
description = new String(buf,
StandardCharsets.UTF_16LE).replace((char)0, ' ').trim();
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfRecordIterator.java
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfRecordIterator.java
index 64b4d176ef..dc2ca7118f 100644
---
a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfRecordIterator.java
+++
b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emf/HemfRecordIterator.java
@@ -81,7 +81,7 @@ public class HemfRecordIterator implements
Iterator<HemfRecord> {
if (readBytes > remBytes) {
throw new RecordFormatException("Record limit exceeded -
readBytes: "+readBytes+" / remBytes: "+remBytes);
}
- stream.skipFully((int) (remBytes - readBytes));
+ stream.skipFully(remBytes - readBytes);
} catch (RecordFormatException e) {
throw e;
} catch (IOException|RuntimeException e) {
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/QuillContents.java
b/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/QuillContents.java
index fdc1bd3010..ee7aac0aee 100644
--- a/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/QuillContents.java
+++ b/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/QuillContents.java
@@ -79,8 +79,8 @@ public final class QuillContents extends HPBFPart {
"QuillContents bit offset " + fromU + " exceeds
Integer.MAX_VALUE");
}
IOUtils.safelyAllocateCheck(lenU,
EscherPart.getMaxRecordLength());
- int from = (int)fromU;
- int len = (int)lenU;
+ int from = Math.toIntExact(fromU);
+ int len = Math.toIntExact(lenU);
byte[] bitData = IOUtils.safelyClone(data, from, len,
EscherPart.getMaxRecordLength());
diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Bitmap.java
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Bitmap.java
index 6e489c7012..e143e5e040 100644
--- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Bitmap.java
+++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Bitmap.java
@@ -31,6 +31,7 @@ import org.apache.poi.hslf.record.RecordAtom;
import org.apache.poi.hslf.usermodel.HSLFPictureData;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.Internal;
+import org.apache.poi.util.MathUtil;
import org.apache.poi.util.Units;
/**
@@ -98,8 +99,8 @@ public abstract class Bitmap extends HSLFPictureData {
try (InputStream is =
UnsynchronizedByteArrayInputStream.builder().setByteArray(getData()).get()){
BufferedImage bi = ImageIO.read(is);
return new Dimension(
- (int)Units.pixelToPoints(bi.getWidth()),
- (int)Units.pixelToPoints(bi.getHeight())
+
MathUtil.safeDoubleToInt(Units.pixelToPoints(bi.getWidth())),
+
MathUtil.safeDoubleToInt(Units.pixelToPoints(bi.getHeight()))
);
} catch (IOException e) {
return new Dimension(200,200);
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
index 96e3292b66..784a815b70 100644
--- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
+++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/PPTXMLDump.java
@@ -121,10 +121,10 @@ public final class PPTXMLDump {
pos += LittleEndianConsts.SHORT_SIZE;
int type = LittleEndian.getUShort(data, pos);
pos += LittleEndianConsts.SHORT_SIZE;
- int size = (int)LittleEndian.getUInt(data, pos);
+ long size = LittleEndian.getUInt(data, pos);
pos += LittleEndianConsts.INT_SIZE;
- if (size < 0) {
+ if (size < 0 || size > Integer.MAX_VALUE) {
// stop processing of invalid header data
continue;
}
@@ -143,15 +143,15 @@ public final class PPTXMLDump {
boolean isContainer = (info & 0x000F) == 0x000F;
if (isContainer) {
//continue to dump child records
- dump(data, pos, size, padding);
+ dump(data, pos, Math.toIntExact(size), padding);
} else {
//dump first 100 bytes of the atom data
- dump(out, data, pos, Math.min(size, data.length-pos), padding,
true);
+ dump(out, data, pos, Math.toIntExact(Math.min(size,
data.length-pos)), padding, true);
}
padding--;
write(out, "</"+recname + ">" + CR, padding);
- pos += size;
+ pos += Math.toIntExact(size);
}
}
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowRecordDumper.java
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowRecordDumper.java
index 30242ba081..18d9494475 100644
---
a/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowRecordDumper.java
+++
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowRecordDumper.java
@@ -235,7 +235,7 @@ public final class SlideShowRecordDumper {
int len = getDiskLen(r);
// Grab the type as hex
- String hexType = makeHex((int) r.getRecordType(), 4);
+ String hexType = makeHex(Math.toIntExact(r.getRecordType()), 4);
String rHexType = reverseHex(hexType);
// Grab the hslf.record type
diff --git
a/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/SlideAtom.java
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/SlideAtom.java
index 42fa25e1c9..72b612d384 100644
--- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/SlideAtom.java
+++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/SlideAtom.java
@@ -109,7 +109,7 @@ public final class SlideAtom extends RecordAtom {
public SlideAtom(){
_header = new byte[8];
LittleEndian.putUShort(_header, 0, 2);
- LittleEndian.putUShort(_header, 2, (int)_type);
+ LittleEndian.putUShort(_header, 2, Math.toIntExact(_type));
LittleEndian.putInt(_header, 4, 24);
byte[] ssdate = new byte[12];
diff --git a/poi/src/main/java/org/apache/poi/util/LittleEndianInputStream.java
b/poi/src/main/java/org/apache/poi/util/LittleEndianInputStream.java
index cc2c3b927f..204a5aa5f2 100644
--- a/poi/src/main/java/org/apache/poi/util/LittleEndianInputStream.java
+++ b/poi/src/main/java/org/apache/poi/util/LittleEndianInputStream.java
@@ -216,4 +216,15 @@ public class LittleEndianInputStream extends
FilterInputStream implements Little
}
checkEOF((int)skipped, len);
}
+
+ public void skipFully(long len) throws IOException {
+ if (len == 0) {
+ return;
+ }
+ long skipped = IOUtils.skipFully(this, len);
+ if (skipped > Integer.MAX_VALUE) {
+ throw new IOException("can't skip further than
"+Integer.MAX_VALUE);
+ }
+ checkEOF((int)skipped, (int)len);
+ }
}
diff --git a/test-data/poi-integration-exceptions.csv
b/test-data/poi-integration-exceptions.csv
index 9244a0337b..f38fec98ff 100644
--- a/test-data/poi-integration-exceptions.csv
+++ b/test-data/poi-integration-exceptions.csv
@@ -375,7 +375,7 @@
spreadsheet/rde.imf.ru_sites_default_files_rde_documents_vodootvedenie_2020.xlsb
spreadsheet/crash-e329fca9087fe21bca4a80c8bc472a661c98d860.xls,handle,HSSF,,org.apache.poi.util.RecordFormatException,33198
bytes written but getRecordSize() reports 33194,
slideshow/61338.wmf,"handle,extract",HWMF,,org.apache.poi.util.RecordFormatException,Tried
to skip 9699347 but skipped: 489,
slideshow/file-45.wmf,handle,HWMF,,org.apache.poi.util.RecordFormatException,The
width or height specified in the header exceed the current limit,
-spreadsheet/61294.emf,"handle,extract",HEMF,,org.apache.poi.util.RecordFormatException,java.lang.IllegalArgumentException:
Skip count must be non-negative,
+spreadsheet/61294.emf,"handle,extract",HEMF,,org.apache.poi.util.RecordFormatException,java.lang.IllegalStateException:
Unexpected end-of-file,
publisher/clusterfuzz-testcase-minimized-POIHPBFFuzzer-6325615354773504.pub,"handle,extract",HPBF,,java.lang.IllegalArgumentException,File
invalid - failed to find document entry,
slideshow/clusterfuzz-testcase-minimized-POIXSLFFuzzer-6071540680032256.pptx,extract,"XSLF,OPC",,java.lang.IllegalStateException,"Invalid
content in diagram, cannot extract text",
slideshow/clusterfuzz-testcase-minimized-POIXSLFFuzzer-6071540680032256.pptx,handle,XSLF,,java.lang.IllegalStateException,SlideMaster
was not found for Name,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]