aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2007-11-12 22:24:15 +0000
committerNick Burch <nick@apache.org>2007-11-12 22:24:15 +0000
commitc31f71a851e5ec5c59bc5f6362bf4f80b4a6597e (patch)
tree7c7237ff8bdc07a7278828fbd147f3339a644ebd
parent33903d5df35375d76beb98cddd0f715a8fcfc388 (diff)
downloadpoi-c31f71a851e5ec5c59bc5f6362bf4f80b4a6597e.tar.gz
poi-c31f71a851e5ec5c59bc5f6362bf4f80b4a6597e.zip
Throw an IllegalArgumentException if asked to addMergeRegion with invalid data, rather than writing out a corrupt file (bug #43807)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@594320 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/documentation/content/xdocs/changes.xml1
-rw-r--r--src/documentation/content/xdocs/status.xml1
-rw-r--r--src/java/org/apache/poi/hssf/model/Sheet.java8
-rw-r--r--src/testcases/org/apache/poi/hssf/model/TestSheetAdditional.java (renamed from src/testcases/org/apache/poi/hssf/model/SheetTest.java)76
4 files changed, 51 insertions, 35 deletions
diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml
index c750d3347a..603d7f35cf 100644
--- a/src/documentation/content/xdocs/changes.xml
+++ b/src/documentation/content/xdocs/changes.xml
@@ -36,6 +36,7 @@
<!-- Don't forget to update status.xml too! -->
<release version="3.0.2-FINAL" date="2007-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">43807 - Throw an IllegalArgumentException if asked to create a merged region with invalid columns or rows, rather than writing out a corrupt file</action>
<action dev="POI-DEVELOPERS" type="fix">43837 - [PATCH] Support for unicode NameRecords</action>
<action dev="POI-DEVELOPERS" type="add">43721 - [PATCH] Support for Chart Title Format records</action>
<action dev="POI-DEVELOPERS" type="fix">42794 - [PATCH] Fix for BOF records from things like Access</action>
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml
index 24d49e9384..6dbb64af6d 100644
--- a/src/documentation/content/xdocs/status.xml
+++ b/src/documentation/content/xdocs/status.xml
@@ -33,6 +33,7 @@
<!-- Don't forget to update changes.xml too! -->
<changes>
<release version="3.0.2-FINAL" date="2007-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">43807 - Throw an IllegalArgumentException if asked to create a merged region with invalid columns or rows, rather than writing out a corrupt file</action>
<action dev="POI-DEVELOPERS" type="fix">43837 - [PATCH] Support for unicode NameRecords</action>
<action dev="POI-DEVELOPERS" type="add">43721 - [PATCH] Support for Chart Title Format records</action>
<action dev="POI-DEVELOPERS" type="fix">42794 - [PATCH] Fix for BOF records from things like Access</action>
diff --git a/src/java/org/apache/poi/hssf/model/Sheet.java b/src/java/org/apache/poi/hssf/model/Sheet.java
index 1f8deec967..ff18f4636b 100644
--- a/src/java/org/apache/poi/hssf/model/Sheet.java
+++ b/src/java/org/apache/poi/hssf/model/Sheet.java
@@ -497,6 +497,14 @@ public class Sheet implements Model
public int addMergedRegion(int rowFrom, short colFrom, int rowTo,
short colTo)
{
+ // Validate input
+ if(rowTo < rowFrom) {
+ throw new IllegalArgumentException("The row to ("+rowTo+") must be >= the row from ("+rowFrom+")");
+ }
+ if(colTo < colFrom) {
+ throw new IllegalArgumentException("The col to ("+colTo+") must be >= the col from ("+colFrom+")");
+ }
+
if (merged == null || merged.getNumAreas() == 1027)
{
merged = ( MergeCellsRecord ) createMergedCells();
diff --git a/src/testcases/org/apache/poi/hssf/model/SheetTest.java b/src/testcases/org/apache/poi/hssf/model/TestSheetAdditional.java
index 0b648874de..69ab3f2986 100644
--- a/src/testcases/org/apache/poi/hssf/model/SheetTest.java
+++ b/src/testcases/org/apache/poi/hssf/model/TestSheetAdditional.java
@@ -33,13 +33,13 @@ import org.apache.poi.hssf.record.StringRecord;
/**
* @author Tony Poppleton
*/
-public class SheetTest extends TestCase
+public class TestSheetAdditional extends TestCase
{
/**
* Constructor for SheetTest.
* @param arg0
*/
- public SheetTest(String arg0)
+ public TestSheetAdditional(String arg0)
{
super(arg0);
}
@@ -66,6 +66,16 @@ public class SheetTest extends TestCase
if ((regionsToAdd % 1027) != 0)
recordsExpected++;
assertTrue("The " + regionsToAdd + " merged regions should have been spread out over " + recordsExpected + " records, not " + recordsAdded, recordsAdded == recordsExpected);
+
+ // Check we can't add one with invalud date
+ try {
+ sheet.addMergedRegion(10, (short)10, 9, (short)12);
+ fail();
+ } catch(IllegalArgumentException e) {}
+ try {
+ sheet.addMergedRegion(10, (short)10, 12, (short)9);
+ fail();
+ } catch(IllegalArgumentException e) {}
}
public void testRemoveMergedRegion()
@@ -126,44 +136,40 @@ public class SheetTest extends TestCase
//TODO
}
- public void testGetCellWidth()
+ public void DISBALEDtestGetCellWidth() throws Exception
{
- try{
- Sheet sheet = Sheet.createSheet();
- ColumnInfoRecord nci = ( ColumnInfoRecord ) sheet.createColInfo();
-
- //prepare test model
- nci.setFirstColumn((short)5);
- nci.setLastColumn((short)10);
- nci.setColumnWidth((short)100);
- Field f = Sheet.class.getDeclaredField("columnSizes");
- f.setAccessible(true);
- List columnSizes = new ArrayList();
- f.set(sheet,columnSizes);
- columnSizes.add(nci);
- sheet.records.add(1 + sheet.dimsloc, nci);
- sheet.dimsloc++;
-
- assertEquals((short)100,sheet.getColumnWidth((short)5));
- assertEquals((short)100,sheet.getColumnWidth((short)6));
- assertEquals((short)100,sheet.getColumnWidth((short)7));
- assertEquals((short)100,sheet.getColumnWidth((short)8));
- assertEquals((short)100,sheet.getColumnWidth((short)9));
- assertEquals((short)100,sheet.getColumnWidth((short)10));
+ Sheet sheet = Sheet.createSheet();
+ ColumnInfoRecord nci = ( ColumnInfoRecord ) sheet.createColInfo();
- sheet.setColumnWidth((short)6,(short)200);
+ // Prepare test model
+ nci.setFirstColumn((short)5);
+ nci.setLastColumn((short)10);
+ nci.setColumnWidth((short)100);
+
+ Field f = null;
+ f = Sheet.class.getDeclaredField("columnSizes");
+ f.setAccessible(true);
+ List columnSizes = new ArrayList();
+ f.set(sheet,columnSizes);
+ columnSizes.add(nci);
+ sheet.records.add(1 + sheet.dimsloc, nci);
+ sheet.dimsloc++;
- assertEquals((short)100,sheet.getColumnWidth((short)5));
- assertEquals((short)200,sheet.getColumnWidth((short)6));
- assertEquals((short)100,sheet.getColumnWidth((short)7));
- assertEquals((short)100,sheet.getColumnWidth((short)8));
- assertEquals((short)100,sheet.getColumnWidth((short)9));
- assertEquals((short)100,sheet.getColumnWidth((short)10));
-
+ assertEquals((short)100,sheet.getColumnWidth((short)5));
+ assertEquals((short)100,sheet.getColumnWidth((short)6));
+ assertEquals((short)100,sheet.getColumnWidth((short)7));
+ assertEquals((short)100,sheet.getColumnWidth((short)8));
+ assertEquals((short)100,sheet.getColumnWidth((short)9));
+ assertEquals((short)100,sheet.getColumnWidth((short)10));
- }
- catch(Exception e){e.printStackTrace();fail(e.getMessage());}
+ sheet.setColumnWidth((short)6,(short)200);
+ assertEquals((short)100,sheet.getColumnWidth((short)5));
+ assertEquals((short)200,sheet.getColumnWidth((short)6));
+ assertEquals((short)100,sheet.getColumnWidth((short)7));
+ assertEquals((short)100,sheet.getColumnWidth((short)8));
+ assertEquals((short)100,sheet.getColumnWidth((short)9));
+ assertEquals((short)100,sheet.getColumnWidth((short)10));
}
/**