diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java index c89d0cdb3..6500c1603 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java @@ -709,13 +709,19 @@ public class XSSFTextParagraph implements Iterable{ public boolean isBullet() { ParagraphPropertyFetcher fetcher = new ParagraphPropertyFetcher(getLevel()){ public boolean fetch(CTTextParagraphProperties props){ - if(props.isSetBuNone()) { + if (props.isSetBuNone()) { setValue(false); return true; } - if(props.isSetBuFont() || props.isSetBuChar() || props.isSetBuAutoNum()){ - setValue(true); - return true; + if (props.isSetBuFont()) { + if (props.isSetBuChar() || props.isSetBuAutoNum()) { + setValue(true); + return true; + } else { + // Excel treats text with buFont but no char/autonum + // as not bulleted + // Possibly the font is just used if bullets turned on again? + } } return false; } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 71e008485..003666958 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -2369,6 +2369,34 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { checkStyle(styleBack); } + /** + * Paragraph with property BuFont but none of the properties + * BuNone, BuChar, and BuAutoNum, used to trigger a NPE + * Excel treats this as not-bulleted, so now do we + */ + @Test + public void testBug57826() { + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("57826.xlsx"); + + assertTrue("no sheets in workbook", workbook.getNumberOfSheets() >= 1); + XSSFSheet sheet = workbook.getSheetAt(0); + + XSSFDrawing drawing = sheet.getDrawingPatriarch(); + assertNotNull(drawing); + + List shapes = drawing.getShapes(); + assertEquals(1, shapes.size()); + assertTrue(shapes.get(0) instanceof XSSFSimpleShape); + + XSSFSimpleShape shape = (XSSFSimpleShape)shapes.get(0); + + // Used to throw a NPE + String text = shape.getText(); + + // No bulleting info included + assertEquals("test ok", text); + } + private void checkStyle(XSSFCellStyle cellStyle) { assertNotNull(cellStyle); assertEquals(0, cellStyle.getFillForegroundColor()); diff --git a/test-data/spreadsheet/57826.xlsx b/test-data/spreadsheet/57826.xlsx new file mode 100644 index 000000000..ccf2dc38f Binary files /dev/null and b/test-data/spreadsheet/57826.xlsx differ