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##{&gt;hello&lt;\"/>"));
         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

Reply via email to