Author: markt
Date: Wed Mar  1 20:44:22 2017
New Revision: 1785032

URL: http://svn.apache.org/viewvc?rev=1785032&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=60769
Fix regression in JSP encoding detection refactoring

Added:
    tomcat/trunk/test/webapp/jsp/encoding/bug60769a.jspx
    tomcat/trunk/test/webapp/jsp/encoding/bug60769b.jspx
Modified:
    tomcat/trunk/java/org/apache/jasper/compiler/EncodingDetector.java
    tomcat/trunk/java/org/apache/jasper/compiler/ParserController.java
    tomcat/trunk/test/org/apache/jasper/compiler/TestEncodingDetector.java
    tomcat/trunk/test/webapp/WEB-INF/web.xml
    tomcat/trunk/test/webapp/jsp/encoding/README.txt
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/jasper/compiler/EncodingDetector.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/EncodingDetector.java?rev=1785032&r1=1785031&r2=1785032&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/EncodingDetector.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/EncodingDetector.java Wed Mar  
1 20:44:22 2017
@@ -27,6 +27,9 @@ import javax.xml.stream.XMLStreamReader;
 /*
  * The BoM detection is derived from:
  * 
http://svn.us.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/xmlparser/XMLEncodingDetector.java?annotate=1742248
+ *
+ * The prolog is always at least as specific as the BOM therefore any encoding
+ * specified in the prolog should take priority over the BOM.
  */
 class EncodingDetector {
 
@@ -35,7 +38,8 @@ class EncodingDetector {
         XML_INPUT_FACTORY = XMLInputFactory.newFactory();
     }
 
-    private final BomResult bomResult;
+    private final String encoding;
+    private final int skip;
     private final boolean encodingSpecifiedInProlog;
 
 
@@ -50,7 +54,7 @@ class EncodingDetector {
         BufferedInputStream bis = new BufferedInputStream(is, 4);
         bis.mark(4);
 
-        bomResult = processBom(bis);
+        BomResult bomResult = processBom(bis);
 
         // Reset the stream back to the start to allow the XML prolog detection
         // to work. Skip any BoM we discovered.
@@ -59,17 +63,25 @@ class EncodingDetector {
             is.read();
         }
 
-        encodingSpecifiedInProlog = (getPrologEncoding(bis) != null);
+        String prologEncoding = getPrologEncoding(bis);
+        if (prologEncoding == null) {
+            encodingSpecifiedInProlog = false;
+            encoding = bomResult.encoding;
+        } else {
+            encodingSpecifiedInProlog = true;
+            encoding = prologEncoding;
+        }
+        skip = bomResult.skip;
     }
 
 
-    String getBomEncoding() {
-        return bomResult.encoding;
+    String getEncoding() {
+        return encoding;
     }
 
 
     int getSkip() {
-        return bomResult.skip;
+        return skip;
     }
 
 

Modified: tomcat/trunk/java/org/apache/jasper/compiler/ParserController.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/ParserController.java?rev=1785032&r1=1785031&r2=1785032&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/ParserController.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/ParserController.java Wed Mar  
1 20:44:22 2017
@@ -321,7 +321,7 @@ class ParserController implements TagCon
             InputStream inStream = JspUtil.getInputStream(absFileName, jar, 
ctxt);
             EncodingDetector encodingDetector = new EncodingDetector(inStream);
 
-            sourceEnc = encodingDetector.getBomEncoding();
+            sourceEnc = encodingDetector.getEncoding();
             isEncodingSpecifiedInProlog = 
encodingDetector.isEncodingSpecifiedInProlog();
             isBomPresent = (encodingDetector.getSkip() > 0);
             skip = encodingDetector.getSkip();

Modified: tomcat/trunk/test/org/apache/jasper/compiler/TestEncodingDetector.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/compiler/TestEncodingDetector.java?rev=1785032&r1=1785031&r2=1785032&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/compiler/TestEncodingDetector.java 
(original)
+++ tomcat/trunk/test/org/apache/jasper/compiler/TestEncodingDetector.java Wed 
Mar  1 20:44:22 2017
@@ -57,6 +57,8 @@ public class TestEncodingDetector extend
         result.add(new Object[] { "bom-utf16le-prolog-utf16be.jspx", 
Integer.valueOf(500), null });
         result.add(new Object[] { "bom-utf16le-prolog-utf16le.jspx", 
Integer.valueOf(200), Boolean.TRUE });
         result.add(new Object[] { "bom-utf16le-prolog-utf8.jspx",    
Integer.valueOf(500), null });
+        result.add(new Object[] { "bug60769a.jspx",    Integer.valueOf(500), 
null });
+        result.add(new Object[] { "bug60769b.jspx",    Integer.valueOf(200), 
Boolean.TRUE });
         return result;
     }
 

Modified: tomcat/trunk/test/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/WEB-INF/web.xml?rev=1785032&r1=1785031&r2=1785032&view=diff
==============================================================================
--- tomcat/trunk/test/webapp/WEB-INF/web.xml (original)
+++ tomcat/trunk/test/webapp/WEB-INF/web.xml Wed Mar  1 20:44:22 2017
@@ -129,6 +129,16 @@
       <include-coda>/bug5nnnn/bug55262-coda.jspf</include-coda>
       <default-content-type>text/plain</default-content-type>
     </jsp-property-group>
+    <jsp-property-group>
+      <url-pattern>/jsp/encoding/bug60769a.jspx</url-pattern>
+      <page-encoding>UTF-8</page-encoding>
+      <is-xml>true</is-xml>
+    </jsp-property-group>
+    <jsp-property-group>
+      <url-pattern>/jsp/encoding/bug60769b.jspx</url-pattern>
+      <page-encoding>ISO-8859-1</page-encoding>
+      <is-xml>true</is-xml>
+    </jsp-property-group>
   </jsp-config>
 
   <servlet>

Modified: tomcat/trunk/test/webapp/jsp/encoding/README.txt
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/jsp/encoding/README.txt?rev=1785032&r1=1785031&r2=1785032&view=diff
==============================================================================
--- tomcat/trunk/test/webapp/jsp/encoding/README.txt (original)
+++ tomcat/trunk/test/webapp/jsp/encoding/README.txt Wed Mar  1 20:44:22 2017
@@ -17,7 +17,7 @@
 
 A number of the test files in this directory specify conflicting encoding
 in the BOM and and in the XML prolog. The rules for determining the actual
-encoding are as follows:
+encoding used in the file are as follows:
 
 1. If there is a BOM, use the encoding defined by the BOM.
 

Added: tomcat/trunk/test/webapp/jsp/encoding/bug60769a.jspx
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/jsp/encoding/bug60769a.jspx?rev=1785032&view=auto
==============================================================================
--- tomcat/trunk/test/webapp/jsp/encoding/bug60769a.jspx (added)
+++ tomcat/trunk/test/webapp/jsp/encoding/bug60769a.jspx Wed Mar  1 20:44:22 
2017
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+  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.
+-->
+<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"; version="2.3">
+  <jsp:directive.page contentType="text/plain" />
+  <jsp:text>OK</jsp:text>
+</jsp:root>
\ No newline at end of file

Added: tomcat/trunk/test/webapp/jsp/encoding/bug60769b.jspx
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/jsp/encoding/bug60769b.jspx?rev=1785032&view=auto
==============================================================================
--- tomcat/trunk/test/webapp/jsp/encoding/bug60769b.jspx (added)
+++ tomcat/trunk/test/webapp/jsp/encoding/bug60769b.jspx Wed Mar  1 20:44:22 
2017
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+  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.
+-->
+<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"; version="2.3">
+  <jsp:directive.page contentType="text/plain" />
+  <jsp:text>OK</jsp:text>
+</jsp:root>
\ No newline at end of file

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1785032&r1=1785031&r2=1785032&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Mar  1 20:44:22 2017
@@ -204,6 +204,12 @@
         Improve the error handling for simple tags to ensure that the tag is
         released and destroyed once used. (remm, violetagg)
       </fix>
+      <fix>
+        <bug>60769</bug>: Correct a regression in the XML encoding detection
+        refactoring carried out for 9.0.0.M16 that incorrectly always used the
+        detected BOM encoding in preference to any encoding specified in the
+        prolog. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Cluster">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to