Hi,

I downloaded 5.0.19 a few weeks ago, and am trying to get our application
running on Tomcat 5 to see if the performance will be a worthwhile upgrade
over Tomcat 4.

I am seeing ArrayOutOfBoundsExceptions in the JspReader class for several of
our files.  All of these files are single line files which do not appear to
have a newline at the end of the file.  These work correctly in Tomcat 4.
Apparently it is desirable to leave them with no newline at the end of the
file because they are used to generate titles for the HTML pages, and we
didn't want newlines in the titles in the HTML.

I have not been able to determine if it is actually legal to have a JSP file
with no newline at the end of the file.

Looking at JspReader the problem appears to occur in JspReader::skipUntil
which starts at line 308 of the file
/jakarta-tomcat-5.0.19-src/jakarta-tomcat-jasper/jasper2/src/share/org/apach
e/jasper/compiler/JspReader.java.

Unfortunately I don't have the stack trace.  The exception was occurring at
the line that calls peekChar() though.

I added some code to catch the exception and try to deal with it, and it
appears to work although I don't completely understand the underlying code.

Here is my modified method:

Mark skipUntil(String limit) throws JasperException {
      Mark ret = null;
        int limlen = limit.length();
        int ch;
        skip:

      for (ret = mark(), ch = nextChar() ; ch != -1 ;\
           ret = mark(), ch = nextChar()) {
                if (ch == limit.charAt(0)) {
                    Mark restart = mark();
                    for (int i = 1 ; i < limlen ; i++) {
                        try {
                            if (peekChar() == limit.charAt(i))          <--- Exception 
occurs
here
                                nextChar();
                            else {
                                reset(restart);
                                continue skip;
                            }
                        } catch (ArrayIndexOutOfBoundsException e) {
                            System.err.println("JspReader::skipUntil -
ArrayIndexOutOfBoundsException");
                            System.err.println("Limit param: \""+limit+"\"");
                            System.err.println("loop index: "+i);
                            System.err.println("Resetting stream, continuing to skip 
label.");
                            System.err.println("Exception:");
                            System.err.println(e);
                            e.printStackTrace(System.err);
                            reset(restart);
                            continue skip;
                     }
                }
            return ret;
           }
      }
     return null;
}

Bugzilla # 15377 is the only similar lead I could find by searching the web,
however it doesn't seem to fix this particular problem and/or the fix was
made a long time ago and was lost in a fork.  (The bug is marked December
2002)

I'm not sure if my addition is correct, or if the correct answer is that the
JSP files must be changed.   However it would seem obvious that if the JSP
files need to be changed, the compiler needs to report the file as an error,
rather than crashing the compiler.

I would like to figure out who is the appropriate person to discuss this
with, and what I should do.  In the meantime I'll go forward with our
evaluation with this little patch in place.

I guess the best answer would be if I was told this is fixed in 5.0.24 or
something like that, but I don't see anything in the changelogs.

Thank you,
Ben Boule



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

Reply via email to