Browse Source

bugzilla #48063: patches 28912 and 29015; fixes infinite loop in footnotes code

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1400704 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-2_0
Luis Bernardo 11 years ago
parent
commit
3ba7c39021

+ 7
- 1
src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java View 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;

+ 69
- 0
test/layoutengine/standard-testcases/footnote-create_new_page.xml View File

@@ -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>

Loading…
Cancel
Save