You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by hg...@apache.org on 2004/03/12 12:59:32 UTC
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_uriMap.c
hgomez 2004/03/12 03:59:32
Modified: jk/native2/common jk_uriMap.c
Log:
Avoid overflow bug when virtual host is more than 1024 chars.
Provided by Rafal Maczewski
Revision Changes Path
1.69 +28 -8 jakarta-tomcat-connectors/jk/native2/common/jk_uriMap.c
Index: jk_uriMap.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_uriMap.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -r1.68 -r1.69
--- jk_uriMap.c 27 Feb 2004 19:10:07 -0000 1.68
+++ jk_uriMap.c 12 Mar 2004 11:59:32 -0000 1.69
@@ -241,29 +241,41 @@
return NULL;
}
+#define MAX_HOST_LENGTH 1024
+
/* Find the vhost */
static jk_uriEnv_t *jk2_uriMap_hostMap(jk_env_t *env, jk_uriMap_t *uriMap,
const char *vhost, int port)
{
int i, j, n;
char *name;
- char hostname[1024] = {0};
+ char hostname[MAX_HOST_LENGTH] = {0};
+ char portSuffix[32];
+ int vhostLen;
if (port) {
if (vhost) {
- if (strchr(vhost, ':'))
- strcpy(hostname, vhost);
- else
- sprintf(hostname, "%s:%d", vhost, port);
+ vhostLen = strlen(vhost);
+ if (strchr(vhost, ':')) {
+ strncpy(hostname, vhost, MAX_HOST_LENGTH);
+ } else {
+ strncpy(hostname, vhost, MAX_HOST_LENGTH);
+ if (strlen(vhost) < MAX_HOST_LENGTH - 1) {
+ sprintf(portSuffix,":%d", port);
+ strncat(hostname+vhostLen, portSuffix, MAX_HOST_LENGTH-vhostLen);
+ }
+ }
}
else
sprintf(hostname, "*:%d", port);
}
else if (vhost)
- strcpy(hostname, vhost);
+ strncpy(hostname, vhost, MAX_HOST_LENGTH);
else /* Return default host if vhost and port wasn't suplied */
return uriMap->vhosts->get(env, uriMap->vhosts, "*");
+ hostname[MAX_HOST_LENGTH - 1] = 0;
+
n = uriMap->vhosts->size(env, uriMap->vhosts);
/* Check the exact hostname:port first */
for (i = 0 ; i < n ; i++) {
@@ -837,13 +849,21 @@
static jk_uriEnv_t *jk2_uriMap_getHostCache(jk_env_t *env, jk_uriMap_t *uriMap,
const char *vhost, int port)
{
- char key[1024];
+ char key[MAX_HOST_LENGTH];
+ char portSuffix[32];
+ int vhostLen;
if (!vhost && !port)
return uriMap->vhosts->get(env, uriMap->vhosts, "*");
if (!vhost)
vhost = "*";
- sprintf(key, "%s:%d", vhost, port);
+ vhostLen = strlen(vhost);
+ strncpy(key, vhost, MAX_HOST_LENGTH);
+ if (vhostLen < MAX_HOST_LENGTH - 1) {
+ sprintf(portSuffix,":%d", port);
+ strncat(key+vhostLen, portSuffix, MAX_HOST_LENGTH);
+ }
+ key[MAX_HOST_LENGTH - 1] = 0;
return uriMap->vhcache->get(env, uriMap->vhcache, key);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org