Author: markt
Date: Mon Oct 27 23:43:16 2014
New Revision: 1634741

URL: http://svn.apache.org/r1634741
Log:
Follow up to 1634161
Update XML template text parser so "\${" and "\#{" are considered
escapes but "\$" and "\#" are not.

Modified:
    tomcat/trunk/java/org/apache/jasper/compiler/Parser.java

Modified: tomcat/trunk/java/org/apache/jasper/compiler/Parser.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Parser.java?rev=1634741&r1=1634740&r2=1634741&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Parser.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Parser.java Mon Oct 27 
23:43:16 2014
@@ -1345,8 +1345,8 @@ class Parser implements TagConstants {
                         "<jsp:text>");
             }
             CharArrayWriter ttext = new CharArrayWriter();
-            while (reader.hasMoreInput()) {
-                int ch = reader.nextChar();
+            int ch = reader.nextChar();
+            while (ch != -1) {
                 if (ch == '<') {
                     // Check for <![CDATA[
                     if (!reader.matches("![CDATA[")) {
@@ -1360,38 +1360,37 @@ class Parser implements TagConstants {
                     String text = reader.getText(start, stop);
                     ttext.write(text, 0, text.length());
                 } else if (ch == '\\') {
-                    if (!reader.hasMoreInput()) {
-                        ttext.write('\\');
-                        break;
-                    }
-                    ch = reader.nextChar();
-                    if (ch != '$' && ch != '#') {
+                    int next = reader.peekChar(0);
+                    if (next == '$' || next =='#') {
+                        if (reader.peekChar(1) == '{') {
+                            ttext.write(reader.nextChar());
+                            ttext.write(reader.nextChar());
+                        }
+                    } else {
                         ttext.write('\\');
                     }
-                    ttext.write(ch);
                 } else if (ch == '$' || ch == '#') {
-                    if (!reader.hasMoreInput()) {
+                    if (reader.peekChar(0) == '{') {
+                        // Swallow the '{'
+                        reader.nextChar();
+
+                        // Create a template text node
+                        @SuppressWarnings("unused")
+                        Node unused = new Node.TemplateText(
+                                ttext.toString(), start, parent);
+
+                        // Mark and parse the EL expression and create its 
node:
+                        parseELExpression(parent, (char) ch);
+
+                        start = reader.mark();
+                        ttext.reset();
+                    } else {
                         ttext.write(ch);
-                        break;
-                    }
-                    if (reader.nextChar() != '{') {
-                        ttext.write(ch);
-                        reader.pushChar();
-                        continue;
                     }
-                    // Create a template text node
-                    @SuppressWarnings("unused")
-                    Node unused = new Node.TemplateText(
-                            ttext.toString(), start, parent);
-
-                    // Mark and parse the EL expression and create its node:
-                    parseELExpression(parent, (char) ch);
-
-                    start = reader.mark();
-                    ttext.reset();
                 } else {
                     ttext.write(ch);
                 }
+                ch = reader.nextChar();
             }
 
             @SuppressWarnings("unused")



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

Reply via email to