Author: lbernardo
Date: Fri Jul 12 23:02:02 2013
New Revision: 1502722

URL: http://svn.apache.org/r1502722
Log:
FOP-2271: XSL Infinite loop; patch submitted by Simon Steiner.

Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOTreeBuilder.java

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=1502722&r1=1502721&r2=1502722&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 Fri Jul 
12 23:02:02 2013
@@ -83,6 +83,7 @@ public class FOTreeBuilder extends Defau
     private boolean empty = true;
 
     private int depth;
+    private boolean errorinstart;
 
     /**
      * <code>FOTreeBuilder</code> constructor
@@ -172,20 +173,28 @@ public class FOTreeBuilder extends Defau
     public void startElement(String namespaceURI, String localName, String 
rawName,
                              Attributes attlist) throws SAXException {
         this.depth++;
-        delegate.startElement(namespaceURI, localName, rawName, attlist);
+        errorinstart = false;
+        try {
+            delegate.startElement(namespaceURI, localName, rawName, attlist);
+        } catch (SAXException e) {
+            errorinstart = true;
+            throw e;
+        }
     }
 
     /** {@inheritDoc} */
     public void endElement(String uri, String localName, String rawName)
                 throws SAXException {
-        this.delegate.endElement(uri, localName, rawName);
-        this.depth--;
-        if (depth == 0) {
-            if (delegate != mainFOHandler) {
-                //Return from sub-handler back to main handler
-                delegate.endDocument();
-                delegate = mainFOHandler;
-                delegate.endElement(uri, localName, rawName);
+        if (!errorinstart) {
+            this.delegate.endElement(uri, localName, rawName);
+            this.depth--;
+            if (depth == 0) {
+                if (delegate != mainFOHandler) {
+                    //Return from sub-handler back to main handler
+                    delegate.endDocument();
+                    delegate = mainFOHandler;
+                    delegate.endElement(uri, localName, rawName);
+                }
             }
         }
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to