]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
bugzilla #48063: patches 28912 and 29015; fixes infinite loop in footnotes code
authorLuis Bernardo <lbernardo@apache.org>
Sun, 21 Oct 2012 19:19:38 +0000 (19:19 +0000)
committerLuis Bernardo <lbernardo@apache.org>
Sun, 21 Oct 2012 19:19:38 +0000 (19:19 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1400704 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java
test/layoutengine/standard-testcases/footnote-create_new_page.xml [new file with mode: 0644]

index 3d45812d834815ad56225c368d47ba9b4d3d6082..47195f90fe5d9bbec9bd049885dea0cd57c30f41 100644 (file)
@@ -886,8 +886,14 @@ class PageBreakingAlgorithm extends BreakingAlgorithm {
         // create pages containing the remaining footnote bodies
         while (insertedFootnotesLength < totalFootnotesLength) {
             final int tmpLength = lengthList.get(footnoteListIndex);
+            // check if last footnote has already been added completely
+            if (insertedFootnotesLength == tmpLength) {
+                footnoteListIndex++;
+                footnoteElementIndex
+                    = getFootnoteList(footnoteListIndex).size() - 1;
+            }
             // try adding some more content
-            if ((tmpLength - insertedFootnotesLength) <= availableBPD) {
+            else if ((tmpLength - insertedFootnotesLength) <= availableBPD) {
                 // add a whole footnote
                 availableBPD -= tmpLength - insertedFootnotesLength;
                 insertedFootnotesLength = tmpLength;
diff --git a/test/layoutengine/standard-testcases/footnote-create_new_page.xml b/test/layoutengine/standard-testcases/footnote-create_new_page.xml
new file mode 100644 (file)
index 0000000..9092f0d
--- /dev/null
@@ -0,0 +1,69 @@
+<?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 a footnote that requires a new page.</p>
+ </info>
+ <fo>
+  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
+   font-family="serif" font-size="11pt">
+   <fo:layout-master-set>
+    <fo:simple-page-master page-height="10cm"
+     page-width="10cm" master-name="simplepage">
+     <fo:region-body region-name="body" />
+    </fo:simple-page-master>
+   </fo:layout-master-set>
+   <fo:page-sequence master-reference="simplepage">
+    <fo:flow flow-name="body">
+     <fo:block margin-top="8.0cm">
+      .... cities
+      <fo:footnote>
+       <fo:inline>(1)</fo:inline>
+       <fo:footnote-body>
+        <fo:block>1. Lisbon, Chicago, London</fo:block>
+       </fo:footnote-body>
+      </fo:footnote>
+      , veggies
+      <fo:footnote>
+       <fo:inline>(2)</fo:inline>
+       <fo:footnote-body>
+        <fo:block>2. Lettuce.</fo:block>
+        <fo:block>2. Garlic.</fo:block>
+        <fo:block>2. Potato.</fo:block>
+       </fo:footnote-body>
+      </fo:footnote>
+      , and fruits
+      <fo:footnote>
+       <fo:inline>(3)</fo:inline>
+       <fo:footnote-body>
+        <fo:block>3. Apple, Coconut, Plum, Kiwi, Canteloupe, Tomato,
+         Clementine, Grapefruit, Guava, Quincy, Lemon, Blueberry,
+         Raspberry, Pomegranate, Watermelon, Orange, Cherry, Peach,
+         Banana, Mango, Pear, Melon, Apricot, Pineapple, Strawberry,
+         Persimon, Medlar. 
+        </fo:block>
+       </fo:footnote-body>
+      </fo:footnote>
+      .
+     </fo:block>
+    </fo:flow>
+   </fo:page-sequence>
+  </fo:root>
+ </fo>
+ <checks>
+  <eval expected="1"
+   xpath="//lineArea[starts-with(., '.... cities')]/ancestor::pageViewport/@nr" />
+  <eval expected="2"
+   xpath="//lineArea[starts-with(., '2. Potato.')]/ancestor::pageViewport/@nr" />
+ </checks>
+</testcase>
\ No newline at end of file