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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org