Bug 65099 - NPE in XWPFStyle.getUsedStyleList(XWPFStyle style, List<XWPFStyle> usedStyleList)
Summary: NPE in XWPFStyle.getUsedStyleList(XWPFStyle style, List<XWPFStyle> usedStyleL...
Status: NEEDINFO
Alias: None
Product: POI
Classification: Unclassified
Component: XWPF (show other bugs)
Version: unspecified
Hardware: PC Linux
: P2 normal (vote)
Target Milestone: ---
Assignee: POI Developers List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-01-22 14:17 UTC by Yvan Lussaud
Modified: 2021-01-30 18:42 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Yvan Lussaud 2021-01-22 14:17:49 UTC
With POI 4.1.0 the following code trigger a NPE on this document:

https://github.com/ObeoNetwork/M2Doc/blob/master/tests/org.obeonetwork.m2doc.tests/resources/userDoc/bug_387/bug_387-userContent.docx

final XWPFDocument inputDoc = ...;
List<XWPFStyle> usedStyleList = inputDoc.getStyles().getUsedStyleList(style);

The NPE:


java.lang.NullPointerException
	at org.apache.poi.xwpf.usermodel.XWPFStyles.getUsedStyleList(XWPFStyles.java:223)
	at org.apache.poi.xwpf.usermodel.XWPFStyles.getUsedStyleList(XWPFStyles.java:240)
	at org.apache.poi.xwpf.usermodel.XWPFStyles.getUsedStyleList(XWPFStyles.java:213)
...

The code seems to check if an object is different from null then pass an other object:

        if ((nextStyle != null) && (!usedStyleList.contains(nextStyle))) {
            usedStyleList.add(linkStyle);
            getUsedStyleList(linkStyle, usedStyleList);
        }

My guess is linkStyle should be replaced by nextStyle.
Comment 1 Dominik Stadler 2021-01-23 13:16:06 UTC
This is handled in https://github.com/apache/poi/pull/216 as well.
Comment 2 Dominik Stadler 2021-01-24 20:04:51 UTC
The patch looks valid, but can you provide a bit more sample-code to reproduce this so we can add a unit-test which verifies this in the future? 

I tried with the following, but this works with the latest version of Apache POI:

    @Test
    public void test65099() throws IOException {
        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("65099.docx")) {
            XWPFStyles styles = doc.getStyles();
            assertNotNull(styles);

            XWPFStyle normal = styles.getStyle("Normal");
            assertNotNull(normal);

            XWPFStyle style1 = styles.getStyle("EdfTitre3Car");
            assertNotNull(style1);

            List<XWPFStyle> list = styles.getUsedStyleList(normal);
            assertNotNull(list);
            assertEquals(1, list.size());

            list = styles.getUsedStyleList(style1);
            assertNotNull(list);
            assertEquals(7, list.size());
        }
    }
Comment 3 Yvan Lussaud 2021-01-25 14:25:25 UTC
Yes I forgot the style initialization:

XWPFStyle style = document.getStyles().getStyle("TableauGrille41");
inputDoc.getStyles().getUsedStyleList(style);

This trigger the NPE with the linked document.
Comment 4 Dominik Stadler 2021-01-30 18:42:41 UTC
This is fixed via r1886063 now, should be included in the upcoming Apache POI 5.0.1.