tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Vincenzo Marchese <v.march...@arsretia.net>
Subject ArrayIndexOutOfBoundsException in Tomcat 4.0.6
Date Mon, 17 Feb 2003 08:23:27 GMT
Hello Tomcat users,
We are encountering a problem in a site running tomcat 4.0.6.
Every now and then (at least once a week) the server crashes complaining 
of an
ArrayIndexOutOfBoundsException in SocketInputStream, logs following (IPs 
masked for privacy :) )

2003-02-14 11:02:23 HttpProcessor[8080][0]  An incoming request is being 
assigned
2003-02-14 11:02:23 HttpProcessor[8080][0]   The incoming request has 
been awaited
2003-02-14 11:02:23 HttpProcessor[8080][0]   parseConnection: 
address=xx.xxx.xx.xx/xx.xxx.xx.xx, port=8080
2003-02-14 11:02:23 HttpProcessor[8080][0] Normalized: 
'/myapp/MyApp/pages/login.jsp' to '/myapp/MyApp/pages/login.jsp'
2003-02-14 11:02:23 HttpProcessor[8080][0]  Request is 'GET' for 
'/myapp/MyApp/pages/login.jsp' with protocol 'HTTP/1.0'
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header accept = image/gif, 
image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, 
application/vnd.ms-excel, application/msword, */*
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header referer = 
http://xxx.xxx.xxx.xx:8080/myapp/pages/login.jsp;jsessionid=4CF6BD25491A6BC1789C312ED4714927
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header accept-language = fr
2003-02-14 11:02:23 HttpProcessor[8080][0]  Adding locale 'fr'
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header pd =
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header connection = Keep-Alive
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header user-agent = 
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header host 
= xxx.xxx.xxx.xx:8080
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header pragma = no-cache
2003-02-14 11:02:23 HttpProcessor[8080][0]  Header cookie = 
JSESSIONID=4CF6BD25491A6BC1789C312ED4714927
2003-02-14 11:02:23 HttpProcessor[8080][0]  Requested cookie session id 
is 4CF6BD25491A6BC1789C312ED4714927
2003-02-14 11:02:23 HttpProcessor[8080][0]  Adding cookie 
JSESSIONID=4CF6BD25491A6BC1789C312ED4714927
2003-02-14 11:02:24 HttpProcessor[8080][0]  An incoming request is being 
assigned
2003-02-14 11:02:24 HttpProcessor[8080][0]   The incoming request has 
been awaited
2003-02-14 11:02:24 HttpProcessor[8080][0]   parseConnection: 
address=xx.xxx.xx.xx/xx.xxx.xx.xx, port=8080
2003-02-14 11:02:24 HttpProcessor[8080][0] Normalized: 
'/myapp/MyApp/home.jsp' to '/myapp/MyApp/home.jsp'
2003-02-14 11:02:24 HttpProcessor[8080][0]  Request is 'GET' for 
'/myapp/MyApp/home.jsp' with protocol 'HTTP/1.0'
2003-02-14 11:02:24 HttpProcessor[8080][0]  Header accept = image/gif, 
image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, 
application/vnd.ms-excel, application/msword, */*
2003-02-14 11:02:24 HttpProcessor[8080][0]  Header referer = 
http://xxx.xxx.xxx.xx:8080/myapp/pages/login.jsp;jsessionid=4CF6BD25491A6BC1789C312ED4714927
2003-02-14 11:02:24 HttpProcessor[8080][0] process.parse
java.lang.ArrayIndexOutOfBoundsException
        at 
org.apache.catalina.connector.http.SocketInputStream.readHeader(SocketInputStream.java:487)
        at 
org.apache.catalina.connector.http.HttpProcessor.parseHeaders(HttpProcessor.java:579)
        at 
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:977)
        at 
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
        at java.lang.Thread.run(Thread.java:479)

Looking into the offending SocketInputStream I found this code snippet:


            while (!eol) {
                // if the buffer is full, extend it
                if (readCount >= maxRead) {
                    if ((2 * maxRead) <= HttpHeader.MAX_VALUE_SIZE) {
                        char[] newBuffer = new char[2 * maxRead];
                        System.arraycopy(header.value, 0, newBuffer, 0,
                                         maxRead);
                        header.value = newBuffer;
                        maxRead = header.value.length;
                    } else {
                        throw new IOException
                            
(sm.getString("requestStream.readline.toolong"));
                    }      
                }      
                // We're at the end of the internal buffer
                if (pos >= count) {
                    // Copying part (or all) of the internal buffer to 
the line
                    // buffer
                    int val = read();
                    if (val == -1)
                        throw new IOException
                            (sm.getString("requestStream.readline.error"));
                    pos = 0;
                    readStart = 0;
                }      
                if (buf[pos] == CR) {
                } else if (buf[pos] == LF) {
                    eol = true;
                } else {
                    // FIXME : Check if binary conversion is working fine
                    int ch = buf[pos] & 0xff;
                    header.value[readCount] = (char) ch;                 
                   // LINE CAUSING THE PROBLEM
                    readCount++;
                }      
                pos++; 
            }

Am i wrong in saying that if a the buffer ends with a CR this code tries 
to read after it without incrementing readCount ?

The funny thing is that the error is caused always when a connection 
comes from the proxy server (I don't know the exact details of it, I'm 
waiting for info
about the server configuration, software, ... )

The ugly thing is that after this request tomcat seems to refuse any 
other request because any other request is handled by thread [0] which is
in error (maybe error state is not cleaned)


Any hint ?


Thank you for your help

Vincenzo







-- 

   I don't need to compromise my principles, because they don't have the
slightest bearing on what happens to me anyway.	  -- Calvin
-----------------------------------------------------
      Vincenzo  Marchese
        ARSRETIA S.r.l.
      Via D. Sansotta, 97
        00144 Roma (IT)
e-mail: v.marchese@arsretia.net
     Tel.: +39 06 52270097
     Fax: +39 06 52272313



---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Mime
View raw message