Author: markt Date: Sat Apr 12 20:15:17 2014 New Revision: 1586891 URL: http://svn.apache.org/r1586891 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56334 Correct double backslash escaping in attributes
Added: tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334.jspx - copied, changed from r1586890, tomcat/trunk/test/webapp/bug5nnnn/bug56334.jspx Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestELParser.java tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestParser.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1586890 Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java?rev=1586891&r1=1586890&r2=1586891&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java Sat Apr 12 20:15:17 2014 @@ -209,7 +209,7 @@ public class ELParser { prev = 0; if (ch == '\\') { buf.append('\\'); - prev = '\\'; + continue; } else if (ch == '$' || (!isDeferredSyntaxAllowedAsLiteral && ch == '#')) { buf.append(ch); @@ -468,18 +468,18 @@ public class ELParser { @Override public void visit(Function n) throws JasperException { - output.append(n.getOriginalText()); + output.append(Generator.escape(n.getOriginalText())); output.append('('); } @Override public void visit(Text n) throws JasperException { - output.append(n.getText()); + output.append(Generator.escape(n.getText())); } @Override public void visit(ELText n) throws JasperException { - output.append(n.getText()); + output.append(Generator.escape(n.getText())); } } } Modified: tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestELParser.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestELParser.java?rev=1586891&r1=1586890&r2=1586891&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestELParser.java (original) +++ tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestELParser.java Sat Apr 12 20:15:17 2014 @@ -170,6 +170,18 @@ public class TestELParser { } + @Test + public void testEscape01() throws JasperException { + doTestParser("${'\\\\'}"); + } + + + @Test + public void testEscape02() throws JasperException { + doTestParser("\\\\x${'\\\\'}"); + } + + private void doTestParser(String input) throws JasperException { Nodes nodes = ELParser.parse(input, false); Modified: tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestParser.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestParser.java?rev=1586891&r1=1586890&r2=1586891&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestParser.java (original) +++ tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestParser.java Sat Apr 12 20:15:17 2014 @@ -375,6 +375,37 @@ public class TestParser extends TomcatBa result.contains("[4: [data-test]: [window.alert('Hello 'World <&>'!')]]")); } + @Test + public void testBug56334() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp"); + // app dir is relative to server home + StandardContext ctxt = (StandardContext) tomcat.addWebapp(null, + "/test", appDir.getAbsolutePath()); + + // This test needs the JSTL libraries + File lib = new File("webapps/examples/WEB-INF/lib"); + ctxt.setAliases("/WEB-INF/lib=" + lib.getCanonicalPath()); + + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + + "/test/bug5nnnn/bug56334.jspx"); + + String result = res.toString(); + + System.out.println(result); + + // NOTE: The expected values must themselves be \ escaped below + Assert.assertTrue(result, result.contains("\\?resize01")); + Assert.assertTrue(result, result.contains("<set data-value=\"\\\\?resize02a\"/>")); + Assert.assertTrue(result, result.contains("<set data-value=\"\\\\x\\\\?resize02b\"/>")); + Assert.assertTrue(result, result.contains("<set data-value=\"\\?resize03a\"/>")); + Assert.assertTrue(result, result.contains("<set data-value=\"\\x\\?resize03b\"/>")); + Assert.assertTrue(result, result.contains("<\\?resize04/>")); + } + /** Assertion for text printed by tags:echo */ private static void assertEcho(String result, String expected) { assertTrue(result.indexOf("<p>" + expected + "</p>") > 0); Copied: tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334.jspx (from r1586890, tomcat/trunk/test/webapp/bug5nnnn/bug56334.jspx) URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334.jspx?p2=tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334.jspx&p1=tomcat/trunk/test/webapp/bug5nnnn/bug56334.jspx&r1=1586890&r2=1586891&rev=1586891&view=diff ============================================================================== (empty) Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1586891&r1=1586890&r2=1586891&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Sat Apr 12 20:15:17 2014 @@ -80,6 +80,14 @@ </fix> </changelog> </subsection> + <subsection name="Jasper"> + <changelog> + <fix> + <bug>56334</bug>: Fix a regression in the handling of back-slash + escaping introduced by the fix for <bug>55735</bug>. (markt) + </fix> + </changelog> + </subsection> <subsection name="Cluster"> <changelog> <fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org