aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas L. Delmelle <adelmelle@apache.org>2009-08-20 21:15:52 +0000
committerAndreas L. Delmelle <adelmelle@apache.org>2009-08-20 21:15:52 +0000
commitb0ece6c49dde5f2ddc6c38338e51a1e8d9131264 (patch)
tree49e4efdbb75ee673574cee45ed47496e171cf960
parentfddf572a55a9b159af1820d2ba2f199bd5c2503c (diff)
downloadxmlgraphics-fop-b0ece6c49dde5f2ddc6c38338e51a1e8d9131264.tar.gz
xmlgraphics-fop-b0ece6c49dde5f2ddc6c38338e51a1e8d9131264.zip
Bugzilla 47710: White-space handling in retrieved markers throws a NullPointerException in some cases.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@806361 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/fo/FOTreeBuilder.java8
-rw-r--r--src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java12
-rw-r--r--status.xml6
-rw-r--r--test/layoutengine/standard-testcases/marker_white-space_npe.xml77
4 files changed, 101 insertions, 2 deletions
diff --git a/src/java/org/apache/fop/fo/FOTreeBuilder.java b/src/java/org/apache/fop/fo/FOTreeBuilder.java
index 7c77f0697..b1fe3bc13 100644
--- a/src/java/org/apache/fop/fo/FOTreeBuilder.java
+++ b/src/java/org/apache/fop/fo/FOTreeBuilder.java
@@ -39,6 +39,7 @@ import org.apache.fop.apps.FormattingResults;
import org.apache.fop.area.AreaTreeHandler;
import org.apache.fop.fo.ElementMapping.Maker;
import org.apache.fop.fo.extensions.ExtensionElementMapping;
+import org.apache.fop.fo.extensions.pdf.PDFExtensionElementMapping;
import org.apache.fop.fo.pagination.Root;
import org.apache.fop.util.ContentHandlerFactory;
import org.apache.fop.util.ContentHandlerFactory.ObjectBuiltListener;
@@ -263,7 +264,8 @@ public class FOTreeBuilder extends DefaultHandler {
}
} else { // check that incoming node is valid for currentFObj
if (currentFObj.getNamespaceURI().equals(FOElementMapping.URI)
- || currentFObj.getNamespaceURI().equals(ExtensionElementMapping.URI)) {
+ || currentFObj.getNamespaceURI().equals(ExtensionElementMapping.URI)
+ || currentFObj.getNamespaceURI().equals(PDFExtensionElementMapping.URI)) {
currentFObj.validateChildNode(locator, namespaceURI, localName);
}
}
@@ -277,6 +279,7 @@ public class FOTreeBuilder extends DefaultHandler {
rootFObj.setBuilderContext(builderContext);
rootFObj.setFOEventHandler(foEventHandler);
}
+ builderContext.foIndex++;
propertyList = foNode.createPropertyList(
currentPropertyList, foEventHandler);
foNode.processNode(localName, getEffectiveLocator(),
@@ -288,6 +291,9 @@ public class FOTreeBuilder extends DefaultHandler {
builderContext.switchMarkerContext(true);
}
}
+ if (foNode.getNameId() == Constants.FO_PAGE_SEQUENCE) {
+ builderContext.getXMLWhiteSpaceHandler().reset();
+ }
} catch (IllegalArgumentException e) {
throw new SAXException(e);
}
diff --git a/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java b/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
index cad9fb729..51e84551c 100644
--- a/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
+++ b/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
@@ -234,6 +234,18 @@ public class XMLWhiteSpaceHandler {
}
/**
+ * Reset the handler, release all references
+ */
+ protected final void reset() {
+ if (pendingInlines != null) {
+ pendingInlines.clear();
+ }
+ nestedBlockStack.clear();
+ charIter = null;
+ firstWhiteSpaceInSeq = null;
+ }
+
+ /**
* Handle white-space for the fo that is passed in, starting at
* firstTextNode (when a nested FO is encountered)
* @param fo the FO for which to handle white-space
diff --git a/status.xml b/status.xml
index 17787f883..57ea52204 100644
--- a/status.xml
+++ b/status.xml
@@ -58,8 +58,12 @@
documents. Example: the fix of marks layering will be such a case when it's done.
-->
<release version="FOP Trunk" date="TBD">
+ <action context="Code" dev="AD" type="fix" fixes-bug="47710">
+ White-space handling in markers with inline-content throws a NullPointerException
+ in some cases.
+ </action>
<action context="Renderers" dev="CB" type="fix" fixes-bug="47694">
- Dithered Background Shading can produce illegal AFP if objects are very small
+ Dithered Background Shading can produce illegal AFP if objects are very small
</action>
<action context="Renderers" dev="CB" type="add">
AFP Output: Added support for IMM Extension on fo:simple-page-master.
diff --git a/test/layoutengine/standard-testcases/marker_white-space_npe.xml b/test/layoutengine/standard-testcases/marker_white-space_npe.xml
new file mode 100644
index 000000000..f9f8e0313
--- /dev/null
+++ b/test/layoutengine/standard-testcases/marker_white-space_npe.xml
@@ -0,0 +1,77 @@
+<?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 for a potential NPE after white-space handling
+ for retrieved markers with only inline content.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master margin-right="6mm" margin-left="7mm" margin-bottom="4mm" margin-top="5mm" page-width="210mm" page-height="297mm" master-name="letterPageFront">
+ <fo:region-body margin-right="59mm" margin-left="8mm" margin-top="53mm" margin-bottom="57mm" region-name="letterPageBody"/>
+ <fo:region-after precedence="false" extent="52mm" region-name="letterPageFooter"/>
+ <fo:region-end precedence="true" extent="49mm" region-name="letterPageSidebar"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence initial-page-number="1" page-break-before="right" master-reference="letterPageFront">
+ <fo:flow flow-name="letterPageBody">
+ <fo:block>page 1</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ <fo:page-sequence master-reference="letterPageFront">
+ <fo:static-content flow-name="letterPageFooter">
+ <fo:block text-align="right" margin-right="1cm" margin-left="8mm">
+ <fo:retrieve-marker retrieve-position="last-ending-within-page" retrieve-boundary="page-sequence" retrieve-class-name="statementFooterMarker"/>
+ </fo:block>
+ </fo:static-content>
+ <fo:flow flow-name="letterPageBody">
+ <fo:block>
+ <fo:block font="bold 16pt Arial">
+ <fo:block>
+ <fo:marker marker-class-name="statementFooterMarker">
+ <fo:inline font-family="HelveticaNeue-LightCond" font-size="11pt" line-height="13pt" text-align="right">Test Marker</fo:inline>
+ </fo:marker>
+ </fo:block>
+ </fo:block>
+ <fo:block break-before="page">
+ <fo:block>
+ <fo:marker marker-class-name="statementFooterMarker"/>
+ </fo:block>
+ </fo:block>
+ </fo:block>
+ <fo:block id="TH_LastPage"/>
+ </fo:flow>
+ </fo:page-sequence>
+ <fo:page-sequence master-reference="letterPageFront">
+ <fo:static-content flow-name="letterPageSidebar">
+ <fo:block-container height="284mm">
+ <fo:block> </fo:block>
+ </fo:block-container>
+ </fo:static-content>
+ <fo:flow break-before="odd-page" flow-name="letterPageBody">
+ <fo:block>last page</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks /><!-- none except the default; simply check for non-occurrence of NPE -->
+</testcase>