Author: markt Date: Wed Jun 18 20:48:12 2014 New Revision: 1603623 URL: http://svn.apache.org/r1603623 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56334#c15 Handle potential whitespace around input.
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/test/webapp-3.0/bug5nnnn/bug56334and56561.jspx tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1603621 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=1603623&r1=1603622&r2=1603623&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 Wed Jun 18 20:48:12 2014 @@ -294,30 +294,34 @@ public class ELParser { int len = input.length(); char quote = 0; int lastAppend = 0; + int start = 0; + int end = len; - if (len > 1) { + // Look to see if the value is quoted + String trimmed = input.trim(); + int trimmedLen = trimmed.length(); + if (trimmedLen > 1) { // Might be quoted - quote = input.charAt(0); + quote = trimmed.charAt(0); if (quote == '\'' || quote == '\"') { - if (input.charAt(len - 1) != quote) { + if (trimmed.charAt(trimmedLen - 1) != quote) { throw new IllegalArgumentException(Localizer.getMessage( "org.apache.jasper.compiler.ELParser.invalidQuotesForStringLiteral", input)); } - lastAppend = 1; - len--; + start = input.indexOf(quote) + 1; + end = start + trimmedLen - 2; } else { quote = 0; } } StringBuilder output = null; - for (int i = lastAppend; i < len; i++) { + for (int i = start; i < end; i++) { char ch = input.charAt(i); if (ch == '\\' || ch == quote) { if (output == null) { output = new StringBuilder(len + 20); - output.append(quote); } output.append(input.substring(lastAppend, i)); lastAppend = i + 1; @@ -329,9 +333,6 @@ public class ELParser { return input; } else { output.append(input.substring(lastAppend, len)); - if (quote != 0) { - output.append(quote); - } return output.toString(); } } 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=1603623&r1=1603622&r2=1603623&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 Wed Jun 18 20:48:12 2014 @@ -92,6 +92,12 @@ public class TestELParser { @Test + public void testFunction05() throws JasperException { + doTestParser("${do:it(x, '\\\\y',z)}", null); + } + + + @Test public void testCompound01() throws JasperException { doTestParser("1${'foo'}1", "1foo1"); } 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=1603623&r1=1603622&r2=1603623&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 Wed Jun 18 20:48:12 2014 @@ -409,6 +409,13 @@ public class TestParser extends TomcatBa Assert.assertTrue(result, result.contains("<set data-value=\"05c##{>hello<\"/>")); Assert.assertTrue(result, result.contains("05x:<set data-value=\"\"/>")); Assert.assertTrue(result, result.contains("<set xmlns:foo=\"urn:06a\\bar\\baz\"/>")); + Assert.assertTrue(result, result.contains("07a:<set data-value=\"\\?resize\"/>")); + Assert.assertTrue(result, result.contains("07b:<set data-content=\"\\?resize=.+\"/>")); + Assert.assertTrue(result, result.contains("07c:<set data-content=\"\\?resize=.+\"/>")); + Assert.assertTrue(result, result.contains("07d:<set data-content=\"false\"/>")); + Assert.assertTrue(result, result.contains("07e:<set data-content=\"false\"/>")); + Assert.assertTrue(result, result.contains("07f:<set data-content=\"\\\'something\'\"/>")); + /* Assert.assertTrue(result, result.contains("07g:<set data-content=\"\\\'something\'\"/>")); */ } /** Assertion for text printed by tags:echo */ Modified: tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334and56561.jspx URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334and56561.jspx?rev=1603623&r1=1603622&r2=1603623&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334and56561.jspx (original) +++ tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug56334and56561.jspx Wed Jun 18 20:48:12 2014 @@ -18,7 +18,8 @@ <jsp:root version="2.2" xmlns="http://www.w3.org/1999/xhtml"; xmlns:jsp="http://java.sun.com/JSP/Page"; - xmlns:c="http://java.sun.com/jsp/jstl/core";> + xmlns:c="http://java.sun.com/jsp/jstl/core"; + xmlns:fn="http://java.sun.com/jsp/jstl/functions";> <jsp:directive.page contentType="text/plain; charset=ISO-8859-1"/> @@ -56,4 +57,12 @@ <!-- Test 6: nonTaglibXmlnsAttributes on a Node.UninterpretedTag --> <set xmlns:foo="urn:06a\bar\baz" /> + <!-- 7. Tests for bug 56334 comment 15 --> + 07a:<set data-value="${'\\?resize'}" /> + 07b:<set data-content="${fn:escapeXml('\\?resize=.+')}" /> + 07c:<set data-content="${fn:escapeXml( '\\?resize=.+')}" /> + 07d:<set data-content="${fn:contains(some_value,'\\?resize=.+')}" /> + 07e:<set data-content="${fn:contains(some_value, '\\?resize=.+')}" /> + 07f:<set data-content="${fn:toLowerCase('\\\'someThing\'')}" /> + 07g:<set data-content="${fn:toLowerCase( '\\\'someThing\'')}" /> </jsp:root> 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=1603623&r1=1603622&r2=1603623&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Jun 18 20:48:12 2014 @@ -152,6 +152,10 @@ <subsection name="Jasper"> <changelog> <fix> + <bug>56334#c15</bug>: Fix a regression in EL parsing when quoted string + follows a whitespace. (kkolinko/markt) + </fix> + <fix> <bug>56561</bug>: Avoid <code>NoSuchElementException</code> while handling attributes with empty string value. (violetagg) </fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org