You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2014/12/22 14:06:58 UTC
svn commit: r1647308 - in /poi/trunk/src/ooxml:
java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java
testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java
Author: centic
Date: Mon Dec 22 13:06:58 2014
New Revision: 1647308
URL: http://svn.apache.org/r1647308
Log:
Bug 56511: Add a null-check to ensure that the run actually has a font to not cause a NullPointerException but rather return null as documented
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java?rev=1647308&r1=1647307&r2=1647308&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java Mon Dec 22 13:06:58 2014
@@ -346,7 +346,7 @@ public class XSSFRichTextString implemen
for(int i = 0; i < st.sizeOfRArray(); i++){
CTRElt r = st.getRArray(i);
- if(i == index) {
+ if(i == index && r.getRPr() != null) {
XSSFFont fnt = new XSSFFont(toCTFont(r.getRPr()));
fnt.setThemesTable(getThemesTable());
return fnt;
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java?rev=1647308&r1=1647307&r2=1647308&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java Mon Dec 22 13:06:58 2014
@@ -22,6 +22,10 @@ import java.util.TreeMap;
import junit.framework.TestCase;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.junit.Test;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRPrElt;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXstring;
@@ -357,4 +361,57 @@ public final class TestXSSFRichTextStrin
assertEquals("<xml-fragment>New Line</xml-fragment>", t2.xmlText());
assertEquals("<xml-fragment xml:space=\"preserve\">\n\n</xml-fragment>", t3.xmlText());
}
+
+
+ @Test
+ public void testBug56511() {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56511.xlsx");
+ for (XSSFSheet sheet : wb) {
+ int lastRow = sheet.getLastRowNum();
+ for (int rowIdx = sheet.getFirstRowNum(); rowIdx <= lastRow; rowIdx++) {
+ XSSFRow row = sheet.getRow(rowIdx);
+ if(row != null) {
+ int lastCell = row.getLastCellNum();
+
+ for (int cellIdx = row.getFirstCellNum(); cellIdx <= lastCell; cellIdx++) {
+
+ XSSFCell cell = row.getCell(cellIdx);
+ if (cell != null) {
+ //System.out.println("row " + rowIdx + " column " + cellIdx + ": " + cell.getCellType() + ": " + cell.toString());
+
+ XSSFRichTextString richText = cell.getRichStringCellValue();
+ int anzFormattingRuns = richText.numFormattingRuns();
+ for (int run = 0; run < anzFormattingRuns; run++) {
+ /*XSSFFont font =*/ richText.getFontOfFormattingRun(run);
+ //System.out.println(" run " + run
+ // + " font " + (font == null ? "<null>" : font.getFontName()));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ public void testBug56511_values() {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56511.xlsx");
+ Sheet sheet = wb.getSheetAt(0);
+ Row row = sheet.getRow(0);
+
+ // verify the values to ensure future changes keep the returned information equal
+ assertEquals(0, row.getCell(0).getRichStringCellValue().numFormattingRuns());
+ assertEquals(0, row.getCell(1).getRichStringCellValue().numFormattingRuns());
+
+ XSSFRichTextString rt = (XSSFRichTextString) row.getCell(2).getRichStringCellValue();
+ assertEquals(2, rt.numFormattingRuns());
+ assertNotNull(rt.getFontOfFormattingRun(0));
+ assertNotNull(rt.getFontOfFormattingRun(1));
+
+ rt = (XSSFRichTextString) row.getCell(3).getRichStringCellValue();
+ assertEquals(3, rt.numFormattingRuns());
+ assertNull(rt.getFontOfFormattingRun(0));
+ assertNotNull(rt.getFontOfFormattingRun(1));
+ assertNotNull(rt.getFontOfFormattingRun(2));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org