From e40d99937e2acd9a2e4a1f759b9522e9919f8fc2 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Thu, 16 Jun 2011 10:13:16 +0000 Subject: [PATCH] Bug 50681 - Avoid exception in HSSFDataFormat.getDataFormatString() git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1136352 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 9 ++++--- .../poi/hssf/usermodel/HSSFDataFormat.java | 10 ++++++-- .../hssf/usermodel/TestHSSFDataFormat.java | 25 ++++++++++++++++--- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index c54e3d0db8..b3a8f4f966 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,11 +34,12 @@ - 50681 - Fixed autosizing columns beyond 255 character limit - 51374 - Fixed incorrect setting of lastPrinted OOXML core property + 50681 - Avoid exceptions in HSSFDataFormat.getDataFormatString() + 50681 - Fixed autosizing columns beyond 255 character limit + 51374 - Fixed incorrect setting of lastPrinted OOXML core property 51351 - Word to XSL-FO converter - 50458 - Fixed missing shapeId in XSSF drawings - 51339 - Fixed arithmetic rounding in formula evaluation + 50458 - Fixed missing shapeId in XSSF drawings + 51339 - Fixed arithmetic rounding in formula evaluation 51356 - Support autoSizeColumn in SXSSF 51335 - Parse picture goal and crop sizes in HWPF 51305 - Add sprmTCellPaddingDefault support in HWPF diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormat.java b/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormat.java index 382452ca97..e2a87a4639 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormat.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormat.java @@ -142,8 +142,14 @@ public final class HSSFDataFormat implements DataFormat { if (_movedBuiltins) { return _formats.get(index); } - - String fmt = _formats.get(index); + + if(index == -1) { + // YK: formatIndex can be -1, for example, for cell in column Y in test-data/spreadsheet/45322.xls + // return null for those + return null; + } + + String fmt = _formats.size() > index ? _formats.get(index) : null; if (_builtinFormats.length > index && _builtinFormats[index] != null) { // It's in the built in range if (fmt != null) { diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java index 6eb9b8dbbb..74116219f5 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java @@ -19,9 +19,8 @@ package org.apache.poi.hssf.usermodel; import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.HSSFTestDataSamples; -import org.apache.poi.ss.usermodel.BaseTestDataFormat; -import org.apache.poi.ss.usermodel.BuiltinFormats; -import org.apache.poi.ss.usermodel.DataFormat; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellReference; /** * Tests for {@link HSSFDataFormat} @@ -49,4 +48,24 @@ public final class TestHSSFDataFormat extends BaseTestDataFormat { assertTrue(customFmtIdx >= BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX ); assertEquals("\u00a3##.00[Yellow]", dataFormat.getFormat(customFmtIdx)); } + + /** + * Bug 51378: getDataFormatString method call crashes when reading the test file + */ + public void test51378(){ + HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("12561-1.xls"); + for (int i = 0; i < wb.getNumberOfSheets(); i++) { + HSSFSheet sheet = wb.getSheetAt(i); + for (Row row : sheet) { + for (Cell cell : row) { + CellStyle style = cell.getCellStyle(); + + String fmt = style.getDataFormatString(); + if(fmt == null) + System.out.println(cell + ": " + fmt); + } + } + } + } + } -- 2.39.5