https://bz.apache.org/bugzilla/show_bug.cgi?id=61798
Bug ID: 61798 Summary: Corrupted Excel file produced due to wrong dimension calculation during XSSFWorkbook.write(str) call Product: POI Version: 3.17-FINAL Hardware: PC Status: NEW Severity: major Priority: P2 Component: XSSF Assignee: dev@poi.apache.org Reporter: marek.zapl...@gmail.com Target Milestone: --- Created attachment 35546 --> https://bz.apache.org/bugzilla/attachment.cgi?id=35546&action=edit Corrupted file generated by JUnit test attached Fix introduced for bug 53611 is causing another bug which produce a corrupted Excel file. POI will generate corrupted file if dimension end column will be the last possible column (number 16384 /column XFD/). Dimension calculation algorithm introduced in revision: https://svn.apache.org/viewvc?view=revision&revision=1767096 has a bug, which sets dimention end cell value too big (+1 column). This bug will lead to corrupted file when last cell will be in use. Following test: https://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java?r1=1767096&r2=1767095&pathrev=1767096 has wrong assertion. Cell number 7 is H (not I) column. Test code to easy reproduce this bug (corrupted Excel file): @Test public void test53611_bug() throws IOException { Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("test"); Row row = sheet.createRow(1); Cell cell = row.createCell(1); cell.setCellValue("blabla"); row = sheet.createRow(4); // Allowable column range for EXCEL2007 is (0..16383) or ('A'..'XDF') cell = row.createCell(16383); cell.setCellValue("blabla"); // we currently only populate the dimension during writing out // to avoid having to iterate all rows/cells in each add/remove of a row or cell //OutputStream str = new FileOutputStream("/tmp/53611_bug.xlsx"); OutputStream str = new ByteArrayOutputStream(); try { wb.write(str); } finally { str.close(); } // Expected :B2:XFD5 // Actual :B2:XFE5 <-- which is out of Excel range. This will produce corrupted Excel file assertEquals("B2:XFD5", ((XSSFSheet)sheet).getCTWorksheet().getDimension().getRef()); wb.close(); } Corrupted file generated by this test also attached. -- You are receiving this mail because: You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org For additional commands, e-mail: dev-h...@poi.apache.org