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

Reply via email to