Affected versions: Tomcat 4 version up to 4.0.3

Possible bugs:
1) handleComment is never called on the EventListener
  handleComment should be called as far as i understand
because the parser can't really know if the code-gen backend
uses the comments.

diff for Parser.java
@@ -440,7 +440,10 @@
                     throw new 
ParseException(Constants.getString("jsp.error.unterminated",
                                                                   new Object[] { 
OPEN_COMMENT }));

-               parser.flushCharData(parser.tmplStart, parser.tmplStop);
+               listener.setTemplateInfo(parser.tmplStart, parser.tmplStop);
+               listener.handleComment(start, stop,reader.getChars(start, stop));
+
                 return true;
             }
             return false;


2) handleTagBegin is called with hasBody == true when a <prefix:myTag />
is encountered (similar to 2622).

   I'm not entirely sure this is a bug, it all depends on what _exactly_ the
intended use of the hasBody parameter in handleTagBegin and handleTagEnd
in Parser.java, my assumption is that it is used to determine if a the tag
has indeed a body.

If so then it should be false when the codepath below is invoked.
Because an empty-element tag can't have a body.

diff for Parser.java
@@ -838,9 +841,9 @@
                 reader.advance(CLOSE_1.length());
                 listener.setTemplateInfo(parser.tmplStart, parser.tmplStop);
                 listener.handleTagBegin(start, reader.mark(), attrs, prefix,
-                                       shortTagName, tli, ti, true);
+                                       shortTagName, tli, ti, false);
                 listener.handleTagEnd(start, reader.mark(), prefix,
-                                     shortTagName, attrs, tli, ti, true);
+                                     shortTagName, attrs, tli, ti, false);
             } else {
                 // Body can be either
                 //     - empty


In the code handling the start-tag and end-tag case the following code is
excuted:

  String bodyString = new String(reader.getChars(bodyStart, bodyStop));
  hasBody = (bodyString.length() > 0);

Which seems to suggest that my assumption regarding the meaning of
hasBody is correct.



Resolution:
Se patch below.


/Regards Mikael Andersson

--- 
c:\src\jakarta-tomcat-4.0.1-src\jasper\src\share\org\apache\jasper\compiler\Parser.java
     Sun Oct 14 11:14:32 2001

+++ 
+c:\src\jakarta-tomcat-4.0.1-src-changed\jasper\src\share\org\apache\jasper\compiler\Parser.java
+ Thu Apr 18 20:34:40 2002
@@ -440,7 +440,10 @@
                     throw new 
ParseException(Constants.getString("jsp.error.unterminated",
                                                                   new Object[] { 
OPEN_COMMENT }));

-               parser.flushCharData(parser.tmplStart, parser.tmplStop);
+               listener.setTemplateInfo(parser.tmplStart, parser.tmplStop);
+               listener.handleComment(start, stop,reader.getChars(start, stop));
+
                 return true;
             }
             return false;
@@ -838,9 +841,9 @@
                 reader.advance(CLOSE_1.length());
                 listener.setTemplateInfo(parser.tmplStart, parser.tmplStop);
                 listener.handleTagBegin(start, reader.mark(), attrs, prefix,
-                                       shortTagName, tli, ti, true);
+                                       shortTagName, tli, ti, false);
                 listener.handleTagEnd(start, reader.mark(), prefix,
-                                     shortTagName, attrs, tli, ti, true);
+                                     shortTagName, attrs, tli, ti, false);
             } else {
                 // Body can be either
                 //     - empty


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to