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: [email protected]
For additional commands, e-mail: [email protected]