]> source.dussan.org Git - poi.git/commitdiff
Bug 62884: sheetnum is not checked in InternalWorkbook.setSheetHidden()
authorDominik Stadler <centic@apache.org>
Tue, 25 Dec 2018 10:00:07 +0000 (10:00 +0000)
committerDominik Stadler <centic@apache.org>
Tue, 25 Dec 2018 10:00:07 +0000 (10:00 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1849717 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/model/InternalWorkbook.java
src/testcases/org/apache/poi/hssf/usermodel/TestSheetHiding.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetHiding.java

index da9ecab3375f98be563b0699a84cc178ec60a501..5fa2d315e20f847b1f0991e3df6c2286f359f195 100644 (file)
@@ -728,6 +728,8 @@ public final class InternalWorkbook {
      * @since 3.16 beta 2
      */
     public void setSheetHidden(int sheetnum, SheetVisibility visibility) {
+        checkSheets(sheetnum);
+
         BoundSheetRecord bsr = getBoundSheetRec(sheetnum);
         bsr.setHidden(visibility == SheetVisibility.HIDDEN);
         bsr.setVeryHidden(visibility == SheetVisibility.VERY_HIDDEN);
index ef70b1325bb729fcbf584ab6a834eeb7cb38d68f..f9d172310b9c16c8dcee2f1441f310bbc9b93d8f 100644 (file)
 package org.apache.poi.hssf.usermodel;
 
 import org.apache.poi.hssf.HSSFITestDataProvider;
+import org.apache.poi.hssf.model.InternalWorkbook;
 import org.apache.poi.ss.usermodel.BaseTestSheetHiding;
+import org.apache.poi.ss.usermodel.SheetVisibility;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 public final class TestSheetHiding extends BaseTestSheetHiding {
     public TestSheetHiding() {
         super(HSSFITestDataProvider.instance,
                 "TwoSheetsOneHidden.xls", "TwoSheetsNoneHidden.xls");
     }
+
+    @Test
+    public void testInternalWorkbookHidden() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        wb.createSheet("MySheet");
+        InternalWorkbook intWb = wb.getWorkbook();
+
+        assertFalse(intWb.isSheetHidden(0));
+        assertFalse(intWb.isSheetVeryHidden(0));
+        assertEquals(SheetVisibility.VISIBLE, intWb.getSheetVisibility(0));
+
+        intWb.setSheetHidden(0, SheetVisibility.HIDDEN);
+        assertTrue(intWb.isSheetHidden(0));
+        assertFalse(intWb.isSheetVeryHidden(0));
+        assertEquals(SheetVisibility.HIDDEN, intWb.getSheetVisibility(0));
+
+        // InternalWorkbook currently behaves slightly different
+        // than HSSFWorkbook, but it should not have effect in normal usage
+        // as checked limits are more strict in HSSFWorkbook
+
+        // check sheet-index with one more will work and add the sheet
+        intWb.setSheetHidden(1, SheetVisibility.HIDDEN);
+        assertTrue(intWb.isSheetHidden(1));
+        assertFalse(intWb.isSheetVeryHidden(1));
+        assertEquals(SheetVisibility.HIDDEN, intWb.getSheetVisibility(1));
+
+        // check sheet-index with index out of bounds => throws exception
+        try {
+            wb.setSheetVisibility(10, SheetVisibility.HIDDEN);
+            fail("Should catch exception here");
+        } catch (RuntimeException e) {
+            // expected here
+        }
+    }
 }
index 2bce1c05d953be487a12a612b3a7e7f967fd1ee6..1611f95a8e89cc7e58b4730443f8fc7141f1ea4e 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.poi.ss.usermodel;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 
@@ -81,7 +82,25 @@ public abstract class BaseTestSheetHiding {
         assertFalse(wb.isSheetHidden(0));
         assertFalse(wb.isSheetVeryHidden(0));
         assertEquals(SheetVisibility.VISIBLE, wb.getSheetVisibility(0));
-    
+
+        // verify limits-check
+
+        // check sheet-index with one more => throws exception
+        try {
+            wb.setSheetVisibility(1, SheetVisibility.HIDDEN);
+            fail("Should catch exception here");
+        } catch (IllegalArgumentException e) {
+            // expected here
+        }
+
+        // check sheet-index with index out of bounds => throws exception
+        try {
+            wb.setSheetVisibility(10, SheetVisibility.HIDDEN);
+            fail("Should catch exception here");
+        } catch (IllegalArgumentException e) {
+            // expected here
+        }
+
         wb.close();
     }