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