]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
FOP-3190: NPE when list item is split alongside an ipd change by João André Gonçalves
authorSimon Steiner <ssteiner@apache.org>
Mon, 15 Jul 2024 09:15:16 +0000 (10:15 +0100)
committerSimon Steiner <ssteiner@apache.org>
Mon, 15 Jul 2024 09:15:16 +0000 (10:15 +0100)
fop-core/src/main/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
fop/test/layoutengine/standard-testcases/list-item-with-ipd-change.xml [new file with mode: 0644]

index 3857ef0709a860b91de1cb51fb76c510cdeeddb9..bc54fa1da9357ac247fea4a30fa7cbd0aceaa949 100644 (file)
@@ -437,7 +437,7 @@ public class ListItemLayoutManager extends SpacedBorderedPaddedBlockLayoutManage
             addedBoxHeight += boxHeight;
             ListItemPosition stepPosition = new ListItemPosition(this, start[0], end[0], start[1], end[1]);
             stepPosition.setOriginalLabelPosition(originalLabelPosition);
-            if (originalBodyPosition != null && originalBodyPosition.getLM() instanceof ListItemContentLayoutManager) {
+            if (originalBodyPosition == null || originalBodyPosition.getLM() instanceof ListItemContentLayoutManager) {
                 // Happens when ListItem has multiple blocks and a block (that's not the last block) ends at the same
                 // page height as a IPD change (e.g. FOP-3098). originalBodyPosition (reset) position needs to be a
                 // Block so that BlockStackingLayoutManager can stack it. Lookahead to find next Block.
diff --git a/fop/test/layoutengine/standard-testcases/list-item-with-ipd-change.xml b/fop/test/layoutengine/standard-testcases/list-item-with-ipd-change.xml
new file mode 100644 (file)
index 0000000..9f42887
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- $Id$ -->
+<testcase>
+  <info>
+    <p>
+      This test checks that no NPE is thrown when a list item is split
+      alongside a IPD change.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+      <fo:layout-master-set>
+        <fo:simple-page-master margin-left="0.675in" master-name="Page">
+          <fo:region-body region-name="Body"/>
+        </fo:simple-page-master>
+        <fo:simple-page-master margin-left="0.65in" master-name="PageRest">
+          <fo:region-body region-name="Body"/>
+        </fo:simple-page-master>
+        <fo:page-sequence-master master-name="PageSequence">
+          <fo:repeatable-page-master-alternatives>
+            <fo:conditional-page-master-reference page-position="first" master-reference="Page"/>
+            <fo:conditional-page-master-reference page-position="rest" master-reference="PageRest"/>
+          </fo:repeatable-page-master-alternatives>
+        </fo:page-sequence-master>
+      </fo:layout-master-set>
+      <fo:page-sequence format="1" id="TH_LastPage" master-reference="PageSequence">
+        <fo:flow flow-name="Body">
+          <fo:block>
+            <fo:list-block>
+              <fo:list-item>
+                <fo:list-item-label>
+                  <fo:block/>
+                </fo:list-item-label>
+                <fo:list-item-body>
+                  <fo:block>a</fo:block>
+                  <fo:block break-before="page">b</fo:block>
+                </fo:list-item-body>
+              </fo:list-item>
+            </fo:list-block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <eval expected="a" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference"/>
+    <eval expected="b" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference"/>
+  </checks>
+</testcase>
\ No newline at end of file