DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=29777>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=29777

getParameterNames problem

           Summary: getParameterNames problem
           Product: Tomcat 4
           Version: 4.1.30
          Platform: All
        OS/Version: Solaris
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Catalina
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Version : tomcat 4.1.30
Tomcat component : org.apache.catalina.util.RequestUtil
Platform : Sparc
OS : Solaris 8
JVM - JDK 1.4.2_04
Web Server : Apache 2.0.49

request(GET)  http[s]://hostname/context/servlet?test%

[Exception]
java.lang.ArrayIndexOutOfBoundsException: 8
        at org.apache.catalina.util.RequestUtil.parseParameters(RequestUtil.
java:539)
        at org.apache.catalina.util.RequestUtil.parseParameters(RequestUtil.
java:348)
        at org.apache.catalina.connector.HttpRequestBase.
parseParameters(HttpRequestBase.java:632)
        at org.apache.catalina.connector.HttpRequestBase.
getParameterNames(HttpRequestBase.java:748)
        at org.apache.catalina.connector.RequestFacade.
getParameterNames(RequestFacade.java:176)
        at javax.servlet.ServletRequestWrapper.
getParameterNames(ServletRequestWrapper.java:223)
        at jp.co.test.testServlet.doGet(testServlet.java:38)


[patch]

# diff -u RequestUtil.java.orig RequestUtil.java
--- RequestUtil.java.orig       2004-06-24 13:11:11.363180000 +0900
+++ RequestUtil.java    2004-06-24 13:11:10.653172000 +0900
@@ -432,8 +432,17 @@
             if (b == '+') {
                 b = (byte)' ';
             } else if (b == '%') {
-                b = (byte) ((convertHexDigit(bytes[ix++]) << 4)
-                            + convertHexDigit(bytes[ix++]));
+                switch(len - ix) {
+                case 0:
+                    b = (byte) 0;
+                    break;
+                case 1:
+                    b = (byte) convertHexDigit(bytes[ix++]);
+                    break;
+                default:
+                    b = (byte) ((convertHexDigit(bytes[ix++]) << 4)
+                                + convertHexDigit(bytes[ix++]));
+                };
             }
             bytes[ox++] = b;
         }
@@ -536,8 +545,17 @@
                     data[ox++] = (byte)' ';
                     break;
                 case '%':
-                    data[ox++] = (byte)((convertHexDigit(data[ix++]) << 4)
-                                    + convertHexDigit(data[ix++]));
+                    switch(data.length - ix) {
+                    case 0:
+                        data[ox++] = (byte)0;
+                        break;
+                    case 1:
+                        data[ox++] = (byte)convertHexDigit(data[ix++]);
+                        break;
+                    default:
+                        data[ox++] = (byte)((convertHexDigit(data[ix++]) << 4)
+                                        + convertHexDigit(data[ix++]));
+                    };
                     break;
                 default:
                     data[ox++] = c;
#

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

Reply via email to