diff --git a/src/java/org/apache/poi/hssf/record/DVRecord.java b/src/java/org/apache/poi/hssf/record/DVRecord.java index e5527d61f1..a7b68a1743 100644 --- a/src/java/org/apache/poi/hssf/record/DVRecord.java +++ b/src/java/org/apache/poi/hssf/record/DVRecord.java @@ -187,10 +187,13 @@ public class DVRecord extends Record this.field_not_used_2 = in.readShort(); //read sec formula data condition - // Not sure if this was needed or not... + //Not sure if this was needed or not... try { in.skip(this.field_size_sec_formula); - } catch(IOException e) { throw new IllegalStateException(e); } + } catch(IOException e) { + e.printStackTrace(); + throw new IllegalStateException(e.getMessage()); + } token_pos = 0; while (token_pos < this.field_size_sec_formula) diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index bb779fef36..0250a4cbaa 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -1748,27 +1748,28 @@ public class HSSFSheet } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { sval = String.valueOf(cell.getBooleanCellValue()); } + if(sval != null) { + String txt = sval + defaultChar; + str = new AttributedString(txt); + copyAttributes(font, str, 0, txt.length()); - String txt = sval + defaultChar; - str = new AttributedString(txt); - copyAttributes(font, str, 0, txt.length()); - - layout = new TextLayout(str.getIterator(), frc); - if(style.getRotation() != 0){ - /* - * Transform the text using a scale so that it's height is increased by a multiple of the leading, - * and then rotate the text before computing the bounds. The scale results in some whitespace around - * the unrotated top and bottom of the text that normally wouldn't be present if unscaled, but - * is added by the standard Excel autosize. - */ - AffineTransform trans = new AffineTransform(); - trans.concatenate(AffineTransform.getRotateInstance(style.getRotation()*2.0*Math.PI/360.0)); - trans.concatenate( - AffineTransform.getScaleInstance(1, fontHeightMultiple) - ); - width = Math.max(width, layout.getOutline(trans).getBounds().getWidth() / defaultCharWidth); - } else { - width = Math.max(width, layout.getBounds().getWidth() / defaultCharWidth); + layout = new TextLayout(str.getIterator(), frc); + if(style.getRotation() != 0){ + /* + * Transform the text using a scale so that it's height is increased by a multiple of the leading, + * and then rotate the text before computing the bounds. The scale results in some whitespace around + * the unrotated top and bottom of the text that normally wouldn't be present if unscaled, but + * is added by the standard Excel autosize. + */ + AffineTransform trans = new AffineTransform(); + trans.concatenate(AffineTransform.getRotateInstance(style.getRotation()*2.0*Math.PI/360.0)); + trans.concatenate( + AffineTransform.getScaleInstance(1, fontHeightMultiple) + ); + width = Math.max(width, layout.getOutline(trans).getBounds().getWidth() / defaultCharWidth); + } else { + width = Math.max(width, layout.getBounds().getWidth() / defaultCharWidth); + } } } diff --git a/src/testcases/org/apache/poi/hssf/data/37684-1.xls b/src/testcases/org/apache/poi/hssf/data/37684-1.xls new file mode 100755 index 0000000000..a59769eb39 Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/37684-1.xls differ diff --git a/src/testcases/org/apache/poi/hssf/data/37684-2.xls b/src/testcases/org/apache/poi/hssf/data/37684-2.xls new file mode 100755 index 0000000000..b17d0fa227 Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/37684-2.xls differ diff --git a/src/testcases/org/apache/poi/hssf/data/TestDataValidation.xls b/src/testcases/org/apache/poi/hssf/data/TestDataValidation.xls index 556ea81927..a9460375cb 100644 Binary files a/src/testcases/org/apache/poi/hssf/data/TestDataValidation.xls and b/src/testcases/org/apache/poi/hssf/data/TestDataValidation.xls differ diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 006b60c3dd..d0dc7203e1 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -954,6 +954,63 @@ extends TestCase { assertTrue("No Exceptions while reading file", true); } + + /** + * Bug 37684 : Unhandled Continue Record Error + */ + public void test37684 () throws Exception { + FileInputStream in = new FileInputStream(new File(cwd, "37684-1.xls")); + HSSFWorkbook wb = new HSSFWorkbook(in); + in.close(); + + assertTrue("No exceptions while reading workbook", true); + + //serialize and read again + ByteArrayOutputStream out = new ByteArrayOutputStream(); + wb.write(out); + out.close(); + assertTrue("No exceptions while saving workbook", true); + + wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray())); + assertTrue("No exceptions while reading saved stream", true); + + + in = new FileInputStream(new File(cwd, "37684-2.xls")); + wb = new HSSFWorkbook(in); + in.close(); + + assertTrue("No exceptions while reading workbook", true); + + //serialize and read again + out = new ByteArrayOutputStream(); + wb.write(out); + out.close(); + assertTrue("No exceptions while saving workbook", true); + + wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray())); + assertTrue("No exceptions while reading saved stream", true); + } + + /** + * Bug 41139: Constructing HSSFWorkbook is failed,threw threw ArrayIndexOutOfBoundsException for creating UnknownRecord + */ + public void test41139() throws Exception { + FileInputStream in = new FileInputStream(new File(cwd, "41139.xls")); + HSSFWorkbook wb = new HSSFWorkbook(in); + in.close(); + + assertTrue("No Exceptions while reading file", true); + + //serialize and read again + ByteArrayOutputStream out = new ByteArrayOutputStream(); + wb.write(out); + out.close(); + + wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray())); + assertTrue("No Exceptions while reading file", true); + + } + } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestUnfixedBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestUnfixedBugs.java index e0e61768f8..3f876c8663 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestUnfixedBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestUnfixedBugs.java @@ -44,79 +44,13 @@ public class TestUnfixedBugs extends TestCase { protected String cwd = System.getProperty("HSSF.testdata.path"); - /* ArrayIndexOutOfBound in BOFRecord */ - public void test28772() throws java.io.IOException { - String filename = System.getProperty("HSSF.testdata.path"); - filename=filename+"/28772.xls"; - FileInputStream in = new FileInputStream(filename); - HSSFWorkbook wb = new HSSFWorkbook(in); - assertTrue("Read book fine!" , true); - } - - /** - * Bug 37684: Unhandled Continue Record Error - * - * BUT NOW(Jan07): It triggers bug 41026!! - * - * java.lang.ArrayIndexOutOfBoundsException: 30 - at org.apache.poi.hssf.record.aggregates.ValueRecordsAggregate.rowHasCells(ValueRecordsAggregate.java:219) - */ - public void test37684() throws Exception { - FileInputStream in = new FileInputStream(new File(cwd, "37684.xls")); - HSSFWorkbook wb = new HSSFWorkbook(in); - in.close(); - HSSFSheet sheet = wb.getSheetAt( 0 ); - assertNotNull(sheet); - - assertTrue("No Exceptions while reading file", true); - - //serialize and read again - ByteArrayOutputStream out = new ByteArrayOutputStream(); - wb.write(out); - out.close(); - - wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray())); - assertTrue("No Exceptions while reading file", true); - - } - - /** - * Bug 41139: Constructing HSSFWorkbook is failed,threw threw ArrayIndexOutOfBoundsException for creating UnknownRecord - * - * BUT NOW (Jan07): It throws the following in write!! - * java.lang.RuntimeException: Coding Error: This method should never be called. This ptg should be converted - at org.apache.poi.hssf.record.formula.AreaNPtg.writeBytes(AreaNPtg.java:54) - at org.apache.poi.hssf.record.formula.Ptg.serializePtgStack(Ptg.java:384) - at org.apache.poi.hssf.record.NameRecord.serialize(NameRecord.java:544) - at org.apache.poi.hssf.model.Workbook.serialize(Workbook.java:757) - at org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWorkbook.java:952) - at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:898) - - */ - public void test41139() throws Exception { - FileInputStream in = new FileInputStream(new File(cwd, "41139.xls")); - HSSFWorkbook wb = new HSSFWorkbook(in); - in.close(); - - assertTrue("No Exceptions while reading file", true); - - //serialize and read again - ByteArrayOutputStream out = new ByteArrayOutputStream(); - wb.write(out); - out.close(); - - wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray())); - assertTrue("No Exceptions while reading file", true); - - } - - public void test43493() throws Exception { - // Has crazy corrup subrecords on - // a EmbeddedObjectRefSubRecord - File f = new File(cwd, "43493.xls"); - HSSFWorkbook wb = new HSSFWorkbook( - new FileInputStream(f) - ); - } + public void test43493() throws Exception { + // Has crazy corrup subrecords on + // a EmbeddedObjectRefSubRecord + File f = new File(cwd, "43493.xls"); + HSSFWorkbook wb = new HSSFWorkbook( + new FileInputStream(f) + ); + } }