From af632bde5907923b5bab1942dbd492ef395b403e Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 6 Jun 2011 16:53:37 +0000 Subject: [PATCH] Revert r1132487 and use Konstantin's suggested fix. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1132700 13f79535-47bb-0310-9956-ffa450edef68 --- .../coyote/http11/AbstractHttp11Processor.java | 20 ++++++++++++++++++-- webapps/docs/changelog.xml | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/java/org/apache/coyote/http11/AbstractHttp11Processor.java b/java/org/apache/coyote/http11/AbstractHttp11Processor.java index fb2352941..677b71121 100644 --- a/java/org/apache/coyote/http11/AbstractHttp11Processor.java +++ b/java/org/apache/coyote/http11/AbstractHttp11Processor.java @@ -39,6 +39,7 @@ 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,8 +994,23 @@ public abstract class AbstractHttp11Processor extends AbstractProcessor { request.serverName().setChars(hostNameC, 0, valueL); } else { request.serverName().setChars(hostNameC, 0, colonPos); - request.setServerPort(Ascii.parseInt( - valueB, valueS + colonPos + 1, valueL - colonPos - 1)); + + int port = 0; + int mult = 1; + for (int i = valueL - 1; i > colonPos; i--) { + int charValue = HexUtils.getDec(valueB[i + valueS]); + if (charValue == -1 || charValue > 9) { + // 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); } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index bb6a4a322..f05fdd9fd 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -51,7 +51,7 @@ When parsing the port in the HTTP host header, treat the port as a base - 10 integer rather than a hexadecimal one. (rjung/markt) + 10 integer rather than a hexadecimal one. (rjung/markt/kkolinko) -- 2.11.0