You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2016/11/13 10:17:20 UTC

[2/2] struts git commit: WW-2561 Throws a Struts exception when there is a bad character in template

WW-2561 Throws a Struts exception when there is a bad character in template


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ef2939ff
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ef2939ff
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ef2939ff

Branch: refs/heads/master
Commit: ef2939ffd0663f8a5d86fafa105deb7183e2ac2d
Parents: 8aba301
Author: Lukasz Lenart <lu...@apache.org>
Authored: Sun Nov 13 11:16:40 2016 +0100
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Sun Nov 13 11:16:40 2016 +0100

----------------------------------------------------------------------
 .../apache/struts2/views/xslt/XSLTResult.java   | 42 ++++++++++----------
 .../struts2/views/xslt/XSLTResultTest.java      | 13 +++++-
 .../resources/XSLTResultTest.bad.character.xsl  | 30 ++++++++++++++
 3 files changed, 61 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/ef2939ff/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java b/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
index 5dfd5fb..fb5068c 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
+++ b/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * 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
@@ -330,26 +328,7 @@ public class XSLTResult implements Result {
                 transformer = TransformerFactory.newInstance().newTransformer();
 
             transformer.setURIResolver(getURIResolver());
-            transformer.setErrorListener(new ErrorListener() {
-
-                public void error(TransformerException exception)
-                        throws TransformerException {
-                    throw new StrutsException("Error transforming result", exception);
-                }
-
-                public void fatalError(TransformerException exception)
-                        throws TransformerException {
-                    throw new StrutsException("Fatal error transforming result", exception);
-                }
-
-                public void warning(TransformerException exception)
-                        throws TransformerException {
-                    if (LOG.isWarnEnabled()) {
-                	LOG.warn(exception.getMessage(), exception);
-                    }
-                }
-                
-            });
+            transformer.setErrorListener(buildErrorListener());
 
             String mimeType;
             if (templates == null)
@@ -385,6 +364,24 @@ public class XSLTResult implements Result {
         }
     }
 
+    protected ErrorListener buildErrorListener() {
+        return new ErrorListener() {
+
+            public void error(TransformerException exception) throws TransformerException {
+                throw new StrutsException("Error transforming result", exception);
+            }
+
+            public void fatalError(TransformerException exception) throws TransformerException {
+                throw new StrutsException("Fatal error transforming result", exception);
+            }
+
+            public void warning(TransformerException exception) throws TransformerException {
+                LOG.warn(exception.getMessage(), exception);
+            }
+
+        };
+    }
+
     protected AdapterFactory getAdapterFactory() {
         if (adapterFactory == null)
             adapterFactory = new AdapterFactory();
@@ -422,6 +419,7 @@ public class XSLTResult implements Result {
 
                 TransformerFactory factory = TransformerFactory.newInstance();
                 factory.setURIResolver(getURIResolver());
+                factory.setErrorListener(buildErrorListener());
                 templates = factory.newTemplates(new StreamSource(resource.openStream()));
                 templatesCache.put(path, templates);
             }

http://git-wip-us.apache.org/repos/asf/struts/blob/ef2939ff/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java b/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
index d1ad400..3e8c7f1 100644
--- a/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
+++ b/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * 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
@@ -192,6 +190,17 @@ public class XSLTResultTest extends StrutsInternalTestCase {
         }
     }
 
+    public void testTransformWithBadCharacter() throws Exception {
+        result = new XSLTResult();
+        result.setStylesheetLocation("XSLTResultTest.bad.character.xsl");
+        try {
+            result.execute(mai);
+            fail("Should have thrown an exception");
+        } catch (Exception ex) {
+            assertEquals("Error transforming result", ex.getMessage());
+        }
+    }
+
     public void testStatusCode() throws Exception {
         result.setParse(false);
         result.setStylesheetLocation("XSLTResultTest.xsl");

http://git-wip-us.apache.org/repos/asf/struts/blob/ef2939ff/core/src/test/resources/XSLTResultTest.bad.character.xsl
----------------------------------------------------------------------
diff --git a/core/src/test/resources/XSLTResultTest.bad.character.xsl b/core/src/test/resources/XSLTResultTest.bad.character.xsl
new file mode 100644
index 0000000..194b430
--- /dev/null
+++ b/core/src/test/resources/XSLTResultTest.bad.character.xsl
@@ -0,0 +1,30 @@
+<!--
+/*
+ * 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.
+ */
+-->
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns="http://www.w3.org/TR/xhtml1/strict">
+
+    <xsl:template match="result">
+        <p>&#x1a;</p>
+        <xsl:copy-of select="document('XSLTResultTest-val.xml')"/>
+    </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file