Author: yegor Date: Tue Mar 20 07:59:29 2007 New Revision: 520416 URL: http://svn.apache.org/viewvc?view=rev&rev=520416 Log: fixed bug 41761: NPE when serializing a workbook with empty rows
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/model/Sheet.java jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/model/Sheet.java URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/model/Sheet.java?view=diff&rev=520416&r1=520415&r2=520416 ============================================================================== --- jakarta/poi/trunk/src/java/org/apache/poi/hssf/model/Sheet.java (original) +++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/model/Sheet.java Tue Mar 20 07:59:29 2007 @@ -783,7 +783,7 @@ int dbCellOffset = 0; for (int block=0;block<blockCount;block++) { rowBlockOffset += rows.getRowBlockSize(block); - cellBlockOffset += cells.getRowCellBlockSize(rows.getStartRowNumberForBlock(block), + cellBlockOffset += null == cells ? 0 : cells.getRowCellBlockSize(rows.getStartRowNumberForBlock(block), rows.getEndRowNumberForBlock(block)); //Note: The offsets are relative to the Workbook BOF. Assume that this is //0 for now..... Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java?view=diff&rev=520416&r1=520415&r2=520416 ============================================================================== --- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java (original) +++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/RowRecordsAggregate.java Tue Mar 20 07:59:29 2007 @@ -213,7 +213,7 @@ //Note: Cell references start from the second row... int cellRefOffset = (rowBlockSize-20); for (int row=startRowNumber;row<=endRowNumber;row++) { - if (cells.rowHasCells(row)) { + if (null != cells && cells.rowHasCells(row)) { final int rowCellSize = cells.serializeCellRow(row, pos, data); pos += rowCellSize; //Add the offset to the first cell for the row into the DBCellRecord. Modified: jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java?view=diff&rev=520416&r1=520415&r2=520416 ============================================================================== --- jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java (original) +++ jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java Tue Mar 20 07:59:29 2007 @@ -19,9 +19,7 @@ package org.apache.poi.hssf.usermodel; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; +import java.io.*; import junit.framework.TestCase; @@ -481,8 +479,43 @@ HSSFCell c = r.createCell((short)0); assertEquals("style should match", style.getIndex(), c.getCellStyle().getIndex()); } - - + + + /** + * + */ + public void testAddEmptyRow() throws Exception { + //try to add 5 empty rows to a new sheet + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet sheet = workbook.createSheet(); + for (int i = 0; i < 5; i++) sheet.createRow(i); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + workbook.write(out); + out.close(); + + workbook = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray())); + assertTrue("No Exceptions while reading file", true); + + //try adding empty rows in an existing worksheet + String cwd = System.getProperty("HSSF.testdata.path"); + FileInputStream in = new FileInputStream(new File(cwd, "Simple.xls")); + workbook = new HSSFWorkbook(in); + in.close(); + assertTrue("No Exceptions while reading file", true); + + sheet = workbook.getSheetAt(0); + for (int i = 3; i < 10; i++) sheet.createRow(i); + + out = new ByteArrayOutputStream(); + workbook.write(out); + out.close(); + + workbook = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray())); + assertTrue("No Exceptions while reading file", true); + + } + public static void main(java.lang.String[] args) { junit.textui.TestRunner.run(TestHSSFSheet.class); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] Mailing List: http://jakarta.apache.org/site/mail2.html#poi The Apache Jakarta POI Project: http://jakarta.apache.org/poi/