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]

Reply via email to