On 05/06/2011 14:09, Rainer Jung wrote: > On 05.06.2011 12:06, ma...@apache.org wrote: >> Modified: >> tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java >> URL: >> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1132362&r1=1132361&r2=1132362&view=diff >> ============================================================================== >> --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java >> (original) >> +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java >> Sun Jun 5 10:06:49 2011 >> @@ -41,6 +41,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; >> @@ -967,6 +968,78 @@ public abstract class AbstractHttp11Proc >> >> abstract boolean prepareSendfile(OutputFilter[] outputFilters); >> >> + /** >> + * Parse host. >> + */ >> + protected void parseHost(MessageBytes valueMB) { >> + >> + if (valueMB == null || valueMB.isNull()) { >> + // HTTP/1.0 >> + // If no host header, use the port info from the endpoint >> + // The host will be obtained lazily from the socket if required >> + // using ActionCode#REQ_LOCAL_NAME_ATTRIBUTE >> + request.setServerPort(endpoint.getPort()); >> + return; >> + } >> + >> + ByteChunk valueBC = valueMB.getByteChunk(); >> + byte[] valueB = valueBC.getBytes(); >> + int valueL = valueBC.getLength(); >> + int valueS = valueBC.getStart(); >> + int colonPos = -1; >> + if (hostNameC.length < valueL) { >> + hostNameC = new char[valueL]; >> + } >> + >> + boolean ipv6 = (valueB[valueS] == '['); >> + boolean bracketClosed = false; >> + for (int i = 0; i < valueL; i++) { >> + char b = (char) valueB[i + valueS]; >> + hostNameC[i] = b; >> + if (b == ']') { >> + bracketClosed = true; >> + } else if (b == ':') { >> + if (!ipv6 || bracketClosed) { >> + colonPos = i; >> + break; >> + } >> + } >> + } >> + >> + if (colonPos < 0) { >> + if (!endpoint.isSSLEnabled()) { >> + // 80 - Default HTTP port >> + request.setServerPort(80); >> + } else { >> + // 443 - Default HTTPS port >> + request.setServerPort(443); >> + } >> + 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]); > > Any idea, why hex digits (including a-f, A-F) are allowed in port numbers? > > I know you only moved that code, but it reminded me of an observation I > made long ago and forgot.
I can't think of any good reason. Happy to limit that to the digits 0-9. Mark --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org