Author: markt
Date: Mon Oct 27 23:43:11 2014
New Revision: 1634740
URL: http://svn.apache.org/r1634740
Log:
Follow-up to r1634161
Use JspReader.peek() rather than nextChar() and pushChar() as this
allows cleaner end of stream handling.
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=1634740&r1=1634739&r2=1634740&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:11 2014
@@ -1284,61 +1284,48 @@ class Parser implements TagConstants {
CharArrayWriter ttext = new CharArrayWriter();
- while (reader.hasMoreInput()) {
- int ch = reader.nextChar();
+ int ch = reader.nextChar();
+ while (ch != -1) {
if (ch == '<') {
// Check for "<\%"
- if (reader.nextChar() == '\\') {
- if (reader.nextChar() == '%') {
- ttext.append('<');
- ttext.append('%');
- } else {
- reader.pushChar();
- reader.pushChar();
- if (ttext.size() == 0) {
- ttext.append('<');
- } else {
- reader.pushChar();
- break;
- }
- }
+ if (reader.peekChar(0) == '\\' && reader.peekChar(1) == '%') {
+ ttext.write(ch);
+ // Swallow the \
+ reader.nextChar();
+ ttext.write(reader.nextChar());
} else {
- reader.pushChar();
if (ttext.size() == 0) {
- ttext.append('<');
+ ttext.write(ch);
} else {
reader.pushChar();
break;
}
}
} else if (ch == '\\' && !pageInfo.isELIgnored()) {
- int next = reader.nextChar();
+ int next = reader.peekChar(0);
if (next == '$' || next == '#') {
- if (reader.nextChar() == '{') {
- ttext.write(next);
- ttext.append('{');
+ if (reader.peekChar(1) == '{') {
+ ttext.write(reader.nextChar());
+ ttext.write(reader.nextChar());
} else {
- ttext.append('\\');
- ttext.write(next);
- reader.pushChar();
+ ttext.write(ch);
+ ttext.write(reader.nextChar());
}
} else {
- ttext.append('\\');
- reader.pushChar();
+ ttext.write(ch);
}
} else if ((ch == '$' || ch == '#' &&
!pageInfo.isDeferredSyntaxAllowedAsLiteral()) &&
!pageInfo.isELIgnored()) {
- if (reader.nextChar() == '{') {
- reader.pushChar();
+ if (reader.peekChar(0) == '{') {
reader.pushChar();
break;
} else {
- reader.pushChar();
ttext.write(ch);
}
} else {
ttext.write(ch);
}
+ ch = reader.nextChar();
}
@SuppressWarnings("unused")
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]