Parse port as base10, not hex
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 5 Jun 2011 20:26:37 +0000 (20:26 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 5 Jun 2011 20:26:37 +0000 (20:26 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1132487 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/http11/AbstractHttp11Processor.java
webapps/docs/changelog.xml

index cc02488..fb23529 100644 (file)
@@ -39,7 +39,6 @@ import org.apache.juli.logging.Log;
 import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.buf.Ascii;
 import org.apache.tomcat.util.buf.ByteChunk;
-import org.apache.tomcat.util.buf.HexUtils;
 import org.apache.tomcat.util.buf.MessageBytes;
 import org.apache.tomcat.util.http.FastHttpDateFormat;
 import org.apache.tomcat.util.http.MimeHeaders;
@@ -993,26 +992,9 @@ public abstract class AbstractHttp11Processor extends AbstractProcessor {
             }
             request.serverName().setChars(hostNameC, 0, valueL);
         } else {
-
             request.serverName().setChars(hostNameC, 0, colonPos);
-
-            int port = 0;
-            int mult = 1;
-            for (int i = valueL - 1; i > colonPos; i--) {
-                int charValue = HexUtils.getDec(valueB[i + valueS]);
-                if (charValue == -1) {
-                    // Invalid character
-                    error = true;
-                    // 400 - Bad request
-                    response.setStatus(400);
-                    adapter.log(request, response, 0);
-                    break;
-                }
-                port = port + (charValue * mult);
-                mult = 10 * mult;
-            }
-            request.setServerPort(port);
-
+            request.setServerPort(Ascii.parseInt(
+                    valueB, valueS + colonPos + 1, valueL - colonPos - 1));
         }
 
     }
index 35ad9e7..bb6a4a3 100644 (file)
         Correctly handle range requests when using sendfile and the APR/native
         HTTP connector. (markt)
       </fix>
+      <fix>
+        When parsing the port in the HTTP host header, treat the port as a base
+        10 integer rather than a hexadecimal one. (rjung/markt) 
+      </fix>
     </changelog>
   </subsection>
 </section>