Author: adelmelle
Date: Thu Aug 20 21:15:52 2009
New Revision: 806361
URL: http://svn.apache.org/viewvc?rev=806361&view=rev
Log:
Bugzilla 47710: White-space handling in retrieved markers throws a
NullPointerException in some cases.
Added:
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/marker_white-space_npe.xml
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
xmlgraphics/fop/trunk/status.xml
Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java?rev=806361&r1=806360&r2=806361&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java Thu Aug
20 21:15:52 2009
@@ -39,6 +39,7 @@
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 @@
}
} 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 @@
rootFObj.setBuilderContext(builderContext);
rootFObj.setFOEventHandler(foEventHandler);
}
+ builderContext.foIndex++;
propertyList = foNode.createPropertyList(
currentPropertyList, foEventHandler);
foNode.processNode(localName, getEffectiveLocator(),
@@ -288,6 +291,9 @@
builderContext.switchMarkerContext(true);
}
}
+ if (foNode.getNameId() == Constants.FO_PAGE_SEQUENCE) {
+ builderContext.getXMLWhiteSpaceHandler().reset();
+ }
} catch (IllegalArgumentException e) {
throw new SAXException(e);
}
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java?rev=806361&r1=806360&r2=806361&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
Thu Aug 20 21:15:52 2009
@@ -234,6 +234,18 @@
}
/**
+ * 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
Modified: xmlgraphics/fop/trunk/status.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=806361&r1=806360&r2=806361&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Thu Aug 20 21:15:52 2009
@@ -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.
Added:
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/marker_white-space_npe.xml
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/marker_white-space_npe.xml?rev=806361&view=auto
==============================================================================
---
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/marker_white-space_npe.xml
(added)
+++
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/marker_white-space_npe.xml
Thu Aug 20 21:15:52 2009
@@ -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>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]