You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2022/01/24 09:53:19 UTC

svn commit: r1897406 - in /poi/trunk/poi/src: main/java/org/apache/poi/ss/util/ImageUtils.java test/java/org/apache/poi/ss/util/TestImageUtils.java

Author: fanningpj
Date: Mon Jan 24 09:53:19 2022
New Revision: 1897406

URL: http://svn.apache.org/viewvc?rev=1897406&view=rev
Log:
fail image size rescaling of infinite values used

Added:
    poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestImageUtils.java
      - copied, changed from r1897371, poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestWorkbookUtil.java
Modified:
    poi/trunk/poi/src/main/java/org/apache/poi/ss/util/ImageUtils.java

Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/util/ImageUtils.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/util/ImageUtils.java?rev=1897406&r1=1897405&r2=1897406&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/util/ImageUtils.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/util/ImageUtils.java Mon Jan 24 09:53:19 2022
@@ -142,8 +142,9 @@ public final class ImageUtils {
      * @param scaleX the amount by which image width is multiplied relative to the original width.
      * @param scaleY the amount by which image height is multiplied relative to the original height.
      * @return the new Dimensions of the scaled picture in EMUs
+     * @throws IllegalArgumentException if scale values lead to negative or infinite results
      */
-    public static Dimension setPreferredSize(Picture picture, double scaleX, double scaleY){
+    public static Dimension setPreferredSize(Picture picture, double scaleX, double scaleY) {
         ClientAnchor anchor = picture.getClientAnchor();
         boolean isHSSF = (anchor instanceof HSSFClientAnchor);
         PictureData data = picture.getPictureData();
@@ -220,6 +221,9 @@ public final class ImageUtils {
         if (targetSize < 0) {
             throw new IllegalArgumentException("target size < 0");
         }
+        if (Double.isInfinite(targetSize) || Double.isNaN(targetSize)) {
+            throw new IllegalArgumentException("target size " + targetSize + " is not supported");
+        }
 
         int cellIdx = startCell;
         double dim, delta;

Copied: poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestImageUtils.java (from r1897371, poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestWorkbookUtil.java)
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestImageUtils.java?p2=poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestImageUtils.java&p1=poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestWorkbookUtil.java&r1=1897371&r2=1897406&rev=1897406&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestWorkbookUtil.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/util/TestImageUtils.java Mon Jan 24 09:53:19 2022
@@ -17,74 +17,74 @@
 
 package org.apache.poi.ss.util;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
+import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
+import org.apache.poi.hssf.usermodel.HSSFPatriarch;
+import org.apache.poi.hssf.usermodel.HSSFPicture;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.junit.jupiter.api.Test;
 
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 /**
- * Tests WorkbookUtil.
+ * Tests ImageUtils.
  *
- * @see org.apache.poi.ss.util.WorkbookUtil
+ * @see ImageUtils
  */
-final class TestWorkbookUtil {
-    /**
-     * borrowed test cases from
-     * {@link org.apache.poi.hssf.record.TestBoundSheetRecord#testValidNames()}
-     */
-    @Test
-    void testCreateSafeNames() {
-
-        String p = "Sheet1";
-        String actual = WorkbookUtil.createSafeSheetName(p);
-        assertEquals(p, actual);
-
-        p = "O'Brien's sales";
-        actual = WorkbookUtil.createSafeSheetName(p);
-        assertEquals(p, actual);
-
-        p = " data # ";
-        actual = WorkbookUtil.createSafeSheetName(p);
-        assertEquals(p, actual);
-
-        p = "data $1.00";
-        actual = WorkbookUtil.createSafeSheetName(p);
-        assertEquals(p, actual);
-
-        // now the replaced versions ...
-        actual = WorkbookUtil.createSafeSheetName("data?");
-        assertEquals("data ", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("abc/def");
-        assertEquals("abc def", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("data[0]");
-        assertEquals("data 0 ", actual);
+final class TestImageUtils {
 
-        actual = WorkbookUtil.createSafeSheetName("data*");
-        assertEquals("data ", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("abc\\def");
-        assertEquals("abc def", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("'data");
-        assertEquals(" data", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("data'");
-        assertEquals("data ", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("d'at'a");
-        assertEquals("d'at'a", actual);
-
-        actual = WorkbookUtil.createSafeSheetName(null);
-        assertEquals("null", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("");
-        assertEquals("empty", actual);
-
-        actual = WorkbookUtil.createSafeSheetName("1234567890123456789012345678901TOOLONG");
-        assertEquals("1234567890123456789012345678901", actual);
+    @Test
+    void testSetPreferredSizeNegativeScale() throws IOException {
+        try (HSSFWorkbook wb = new HSSFWorkbook()) {
+            HSSFSheet sheet = wb.createSheet();
+            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+
+            byte[] pictureData = HSSFTestDataSamples.getTestDataFileContent("45829.png");
+            int idx1 = wb.addPicture(pictureData, HSSFWorkbook.PICTURE_TYPE_PNG);
+            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 10, 10, (short)0, 0, (short)10, 10);
+            HSSFPicture picture = patriarch.createPicture(anchor, idx1);
+
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, -1, 1)
+            );
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, 1, -1)
+            );
+        }
+    }
 
-        actual = WorkbookUtil.createSafeSheetName("sheet:a4");
-        assertEquals("sheet a4", actual);
+    @Test
+    void testSetPreferredSizeInfiniteScale() throws IOException {
+        try (HSSFWorkbook wb = new HSSFWorkbook()) {
+            HSSFSheet sheet = wb.createSheet();
+            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+
+            byte[] pictureData = HSSFTestDataSamples.getTestDataFileContent("45829.png");
+            int idx1 = wb.addPicture(pictureData, HSSFWorkbook.PICTURE_TYPE_PNG);
+            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 10, 10, (short)0, 0, (short)10, 10);
+            HSSFPicture picture = patriarch.createPicture(anchor, idx1);
+
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, Double.POSITIVE_INFINITY, 1)
+            );
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, 1, Double.NEGATIVE_INFINITY)
+            );
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, 1, Double.POSITIVE_INFINITY)
+            );
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, Double.NEGATIVE_INFINITY, 1)
+            );
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, Double.NaN, 1)
+            );
+            assertThrows(IllegalArgumentException.class, () ->
+                    ImageUtils.setPreferredSize(picture, 1, Double.NaN)
+            );
+        }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org