From 34601b5377387e293868937bfa8f7e4cb4d45573 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 13 Sep 2022 23:38:12 +0000 Subject: [PATCH] some lgtm issues git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1904048 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xslf/usermodel/XSLFPictureShape.java | 21 ++++++----- .../poi/xssf/streaming/SXSSFWorkbook.java | 3 +- .../hemf/record/emfplus/HemfPlusBrush.java | 25 +++++++++---- .../apache/poi/hslf/dev/SlideShowDumper.java | 2 +- .../org/apache/poi/hssf/util/HSSFColor.java | 4 +-- .../java/org/apache/poi/ss/util/CellUtil.java | 2 +- .../java/org/apache/poi/util/IOUtils.java | 36 +++++++++---------- 7 files changed, 55 insertions(+), 38 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 5e7633ba2f..53727ef5e8 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 @@ -353,6 +353,10 @@ public class XSLFPictureShape extends XSLFSimpleShape */ public static XSLFPictureShape addSvgImage(XSLFSheet sheet, XSLFPictureData svgPic, PictureType previewType, Rectangle2D anchor) throws IOException { + if (svgPic == null || svgPic.getType() == null) { + throw new IllegalArgumentException("Cannot process svgPic with null type"); + } + SVGImageRenderer renderer = new SVGImageRenderer(); try (InputStream is = svgPic.getInputStream()) { renderer.loadImage(is, svgPic.getType().contentType); @@ -368,16 +372,17 @@ public class XSLFPictureShape extends XSLFSimpleShape } BufferedImage thmBI = renderer.getImage(dim); - UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(100000); - // use extension instead of enum name, because of "jpeg" - ImageIO.write(thmBI, pt.extension.substring(1), bos); + try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(100000)) { + // use extension instead of enum name, because of "jpeg" + ImageIO.write(thmBI, pt.extension.substring(1), bos); - XSLFPictureData pngPic = sheet.getSlideShow().addPicture(bos.toInputStream(), pt); + XSLFPictureData pngPic = sheet.getSlideShow().addPicture(bos.toInputStream(), pt); - XSLFPictureShape shape = sheet.createPicture(pngPic); - shape.setAnchor(anc); - shape.setSvgImage(svgPic); - return shape; + XSLFPictureShape shape = sheet.createPicture(pngPic); + shape.setAnchor(anc); + shape.setSvgImage(svgPic); + return shape; + } } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java index 54457e86ff..560c196f89 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java @@ -1025,8 +1025,9 @@ public class SXSSFWorkbook implements Workbook { //Substitute the template entries with the generated sheet data files try ( InputStream is = bos.toInputStream(); + ZipArchiveInputStream zis = new ZipArchiveInputStream(is); ZipInputStreamZipEntrySource source = new ZipInputStreamZipEntrySource( - new ZipArchiveThresholdInputStream(new ZipArchiveInputStream(is))) + new ZipArchiveThresholdInputStream(zis)) ) { injectData(source, stream); } diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java index 69668f3deb..09c17d054b 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusBrush.java @@ -27,6 +27,7 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.io.IOException; +import java.io.InputStream; import java.util.AbstractMap; import java.util.Arrays; import java.util.Collections; @@ -387,17 +388,27 @@ public class HemfPlusBrush { return brushBytes; } + /** + * @param continuedObjectData list of object data + * @return {@link EmfPlusBrushData} + * @throws IllegalStateException if the data cannot be processed + */ public EmfPlusBrushData getBrushData(List continuedObjectData) { EmfPlusBrushData brushData = brushType.constructor.get(); byte[] buf = getRawData(continuedObjectData); - try { - brushData.init(new LittleEndianInputStream(new UnsynchronizedByteArrayInputStream(buf)), buf.length); + try (UnsynchronizedByteArrayInputStream bis = new UnsynchronizedByteArrayInputStream(buf)){ + brushData.init(new LittleEndianInputStream(bis), buf.length); } catch (IOException e) { - throw new RuntimeException(e); + throw new IllegalStateException(e); } return brushData; } + /** + * @param continuedObjectData list of object data + * @return byte array + * @throws IllegalStateException if the data cannot be processed + */ public byte[] getRawData(List continuedObjectData) { try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream()) { bos.write(getBrushBytes()); @@ -408,7 +419,7 @@ public class HemfPlusBrush { } return bos.toByteArray(); } catch (IOException e) { - throw new RuntimeException(e); + throw new IllegalStateException(e); } } @@ -560,7 +571,7 @@ public class HemfPlusBrush { } if (isPreset() && (isBlendH() || isBlendV())) { - throw new RuntimeException("invalid combination of preset colors and blend factors v/h"); + throw new IOException("invalid combination of preset colors and blend factors v/h"); } size += (isPreset()) ? readColors(leis, d -> positions = d, c -> blendColors = c) : 0; @@ -764,7 +775,7 @@ public class HemfPlusBrush { final boolean isPreset = PRESET_COLORS.isSet(dataFlags); final boolean blendH = BLEND_FACTORS_H.isSet(dataFlags); if (isPreset && blendH) { - throw new RuntimeException("invalid combination of preset colors and blend factors h"); + throw new IOException("invalid combination of preset colors and blend factors h"); } size += (isPreset) ? readColors(leis, d -> positions = d, c -> blendColors = c) : 0; @@ -777,7 +788,7 @@ public class HemfPlusBrush { // A 32-bit unsigned integer that specifies the number of focus scales. This value MUST be 2. int focusScaleCount = leis.readInt(); if (focusScaleCount != 2) { - throw new RuntimeException("invalid focus scale count"); + throw new IOException("invalid focus scale count"); } // A floating-point value that defines the horizontal/vertical focus scale. // The focus scale MUST be a value between 0.0 and 1.0, exclusive. diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowDumper.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowDumper.java index d4d6094743..d457ee63b7 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowDumper.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/dev/SlideShowDumper.java @@ -252,7 +252,7 @@ public final class SlideShowDumper { // Check for corrupt / lying ones if (recordLen != 8 && (recordLen != (atomLen + 8))) { - out.printf(Locale.ROOT, ind + "** Atom length of $2d ($3d) doesn't match record length of %4d%n", "", atomLen, atomLen + 8, recordLen); + out.printf(Locale.ROOT, ind + "** Atom length of %2d (%3d) doesn't match record length of %4d%n", atomLen, atomLen + 8, recordLen); } // Print the record's details diff --git a/poi/src/main/java/org/apache/poi/hssf/util/HSSFColor.java b/poi/src/main/java/org/apache/poi/hssf/util/HSSFColor.java index 1d791102aa..263a7c0da9 100644 --- a/poi/src/main/java/org/apache/poi/hssf/util/HSSFColor.java +++ b/poi/src/main/java/org/apache/poi/hssf/util/HSSFColor.java @@ -190,11 +190,11 @@ public class HSSFColor implements Color { Map result = new HashMap<>(eList.size() * 3 / 2); for (Map.Entry colorRef : eList.entrySet()) { - Integer index1 = (int)colorRef.getKey().getIndex(); + Integer index1 = Integer.valueOf(colorRef.getKey().getIndex()); if (!result.containsKey(index1)) { result.put(index1, colorRef.getValue()); } - Integer index2 = (int)colorRef.getKey().getIndex2(); + Integer index2 = Integer.valueOf(colorRef.getKey().getIndex2()); if (index2 != -1 && !result.containsKey(index2)) { result.put(index2, colorRef.getValue()); } diff --git a/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java b/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java index 0ba1123161..43f2be2600 100644 --- a/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java +++ b/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java @@ -258,7 +258,7 @@ public final class CellUtil { } // Copy CellStyle - if (policy.isCopyCellStyle()) { + if (policy.isCopyCellStyle() && srcCell != null) { if (srcCell.getSheet() != null && destCell.getSheet() != null && destCell.getSheet().getWorkbook() == srcCell.getSheet().getWorkbook()) { destCell.setCellStyle(srcCell.getCellStyle()); diff --git a/poi/src/main/java/org/apache/poi/util/IOUtils.java b/poi/src/main/java/org/apache/poi/util/IOUtils.java index 8d80c7b7d8..66fec9473c 100644 --- a/poi/src/main/java/org/apache/poi/util/IOUtils.java +++ b/poi/src/main/java/org/apache/poi/util/IOUtils.java @@ -136,26 +136,26 @@ public final class IOUtils { checkByteSizeLimit(limit); stream.mark(limit); - UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(limit); - copy(new BoundedInputStream(stream, limit), bos); + try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(limit)) { + copy(new BoundedInputStream(stream, limit), bos); - int readBytes = bos.size(); - if (readBytes == 0) { - throw new EmptyFileException(); - } + int readBytes = bos.size(); + if (readBytes == 0) { + throw new EmptyFileException(); + } - if (readBytes < limit) { - bos.write(new byte[limit-readBytes]); + if (readBytes < limit) { + bos.write(new byte[limit-readBytes]); + } + byte[] peekedBytes = bos.toByteArray(); + if(stream instanceof PushbackInputStream) { + PushbackInputStream pin = (PushbackInputStream)stream; + pin.unread(peekedBytes, 0, readBytes); + } else { + stream.reset(); + } + return peekedBytes; } - byte[] peekedBytes = bos.toByteArray(); - if(stream instanceof PushbackInputStream) { - PushbackInputStream pin = (PushbackInputStream)stream; - pin.unread(peekedBytes, 0, readBytes); - } else { - stream.reset(); - } - - return peekedBytes; } /** @@ -522,7 +522,7 @@ public final class IOUtils { } /* * N.B. no need to synchronize this because: - we don't care if the buffer is created multiple times (the data - * is ignored) - we always use the same size buffer, so if it it is recreated it will still be OK (if the buffer + * is ignored) - we always use the same size buffer, so if it is recreated it will still be OK (if the buffer * size were variable, we would need to synch. to ensure some other thread did not create a smaller one) */ if (SKIP_BYTE_BUFFER == null) {