Author: rjung Date: Sun Dec 28 17:12:59 2014 New Revision: 1648227 URL: http://svn.apache.org/r1648227 Log: Let JK_SHM_STR_SIZ be the full byte size including terminating 0 byte.
Keep copying and comparing JK_SHM_STR_SIZ bytes. This is now one more byte, but we assume string length to be at most JK_SHM_STR_SIZ-1 and we don't want unexpected string truncation to happen. Still need to add length checks for the configuration input parameters. Modified: tomcat/jk/trunk/native/common/jk_ajp_common.c tomcat/jk/trunk/native/common/jk_ajp_common.h tomcat/jk/trunk/native/common/jk_lb_worker.h tomcat/jk/trunk/native/common/jk_shm.h tomcat/jk/trunk/native/common/jk_status.c Modified: tomcat/jk/trunk/native/common/jk_ajp_common.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_ajp_common.c?rev=1648227&r1=1648226&r2=1648227&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_ajp_common.c (original) +++ tomcat/jk/trunk/native/common/jk_ajp_common.c Sun Dec 28 17:12:59 2014 @@ -1099,7 +1099,7 @@ void jk_ajp_pull(ajp_worker_t * aw, int { int address_change = JK_FALSE; int port = 0; - char host[JK_SHM_STR_SIZ+1]; + char host[JK_SHM_STR_SIZ]; jk_sockaddr_t inet_addr; JK_TRACE_ENTER(l); Modified: tomcat/jk/trunk/native/common/jk_ajp_common.h URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_ajp_common.h?rev=1648227&r1=1648226&r2=1648227&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_ajp_common.h (original) +++ tomcat/jk/trunk/native/common/jk_ajp_common.h Sun Dec 28 17:12:59 2014 @@ -287,7 +287,7 @@ struct ajp_worker /* Shared memory worker data */ jk_shm_ajp_worker_t *s; - char name[JK_SHM_STR_SIZ+1]; + char name[JK_SHM_STR_SIZ]; /* Sequence counter starting at 0 and increasing * every time we change the config */ @@ -300,7 +300,7 @@ struct ajp_worker jk_sockaddr_t worker_inet_addr; /* Contains host and port */ unsigned connect_retry_attempts; - char host[JK_SHM_STR_SIZ+1]; + char host[JK_SHM_STR_SIZ]; int port; int addr_sequence; /* Whether the address is resolved */ int maintain_time; Modified: tomcat/jk/trunk/native/common/jk_lb_worker.h URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.h?rev=1648227&r1=1648226&r2=1648227&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_lb_worker.h (original) +++ tomcat/jk/trunk/native/common/jk_lb_worker.h Sun Dec 28 17:12:59 2014 @@ -140,18 +140,18 @@ struct lb_sub_worker /* Shared memory worker data */ jk_shm_lb_sub_worker_t *s; - char name[JK_SHM_STR_SIZ+1]; + char name[JK_SHM_STR_SIZ]; /* Sequence counter starting at 0 and increasing * every time we change the config */ volatile unsigned int sequence; /* route */ - char route[JK_SHM_STR_SIZ+1]; + char route[JK_SHM_STR_SIZ]; /* worker domain */ - char domain[JK_SHM_STR_SIZ+1]; + char domain[JK_SHM_STR_SIZ]; /* worker redirect route */ - char redirect[JK_SHM_STR_SIZ+1]; + char redirect[JK_SHM_STR_SIZ]; /* worker distance */ int distance; /* current activation state (config) of the worker */ @@ -171,7 +171,7 @@ struct lb_worker /* Shared memory worker data */ jk_shm_lb_worker_t *s; - char name[JK_SHM_STR_SIZ+1]; + char name[JK_SHM_STR_SIZ]; /* Sequence counter starting at 0 and increasing * every time we change the config */ @@ -197,11 +197,11 @@ struct lb_worker unsigned int max_packet_size; unsigned int next_offset; /* Session cookie */ - char session_cookie[JK_SHM_STR_SIZ+1]; + char session_cookie[JK_SHM_STR_SIZ]; /* Session path */ - char session_path[JK_SHM_STR_SIZ+1]; + char session_path[JK_SHM_STR_SIZ]; int set_session_cookie; - char session_cookie_path[JK_SHM_STR_SIZ+1]; + char session_cookie_path[JK_SHM_STR_SIZ]; }; typedef struct lb_worker lb_worker_t; Modified: tomcat/jk/trunk/native/common/jk_shm.h URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_shm.h?rev=1648227&r1=1648226&r2=1648227&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_shm.h (original) +++ tomcat/jk/trunk/native/common/jk_shm.h Sun Dec 28 17:12:59 2014 @@ -42,7 +42,7 @@ extern "C" #define JK_SHM_MAJOR '1' #define JK_SHM_MINOR '3' -#define JK_SHM_STR_SIZ (JK_ALIGN(JK_MAX_NAME_LEN + 1, 8) - 1) +#define JK_SHM_STR_SIZ (JK_ALIGN(JK_MAX_NAME_LEN + 1, 8)) #define JK_SHM_MAGIC '!', 'J', 'K', 'S', 'H', 'M', JK_SHM_MAJOR, JK_SHM_MINOR #define JK_SHM_MAGIC_SIZ 8 @@ -62,7 +62,7 @@ struct jk_shm_worker_header /* JK_XXX_WORKER_TYPE */ int type; /* worker name */ - char name[JK_SHM_STR_SIZ+1]; + char name[JK_SHM_STR_SIZ]; /* parent slot id. * Zero in case worker does not belong to balancer. */ @@ -78,7 +78,7 @@ typedef struct jk_shm_worker_header jk_s struct jk_shm_ajp_worker { jk_shm_worker_header_t h; - char host[JK_SHM_STR_SIZ+1]; + char host[JK_SHM_STR_SIZ]; int port; volatile int addr_sequence; @@ -130,11 +130,11 @@ struct jk_shm_lb_sub_worker jk_shm_worker_header_t h; /* route */ - char route[JK_SHM_STR_SIZ+1]; + char route[JK_SHM_STR_SIZ]; /* worker domain */ - char domain[JK_SHM_STR_SIZ+1]; + char domain[JK_SHM_STR_SIZ]; /* worker redirect route */ - char redirect[JK_SHM_STR_SIZ+1]; + char redirect[JK_SHM_STR_SIZ]; /* Number of currently busy channels */ volatile int busy; /* worker distance */ Modified: tomcat/jk/trunk/native/common/jk_status.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_status.c?rev=1648227&r1=1648226&r2=1648227&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_status.c (original) +++ tomcat/jk/trunk/native/common/jk_status.c Sun Dec 28 17:12:59 2014 @@ -3279,7 +3279,7 @@ static int commit_member(jk_ws_service_t int i; int old; int resolve = JK_FALSE; - char host[JK_SHM_STR_SIZ+1]; + char host[JK_SHM_STR_SIZ]; int port = 0; JK_TRACE_ENTER(l); @@ -3314,11 +3314,11 @@ static int commit_member(jk_ws_service_t *side_effect |= JK_STATUS_NEEDS_UPDATE_MULT | JK_STATUS_NEEDS_PUSH; if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_ROUTE, NULL, &arg, l)) == JK_TRUE) { - if (strncmp(wr->route, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->route, arg, JK_SHM_STR_SIZ )) { jk_log(l, JK_LOG_INFO, "Status worker '%s' changing 'route' for sub worker '%s' of lb worker '%s' from '%s' to '%s'", w->name, wr->name, lb_name, wr->route, arg); - strncpy(wr->route, arg, JK_SHM_STR_SIZ); + strncpy(wr->route, arg, JK_SHM_STR_SIZ ); *side_effect |= JK_STATUS_NEEDS_PUSH; if (!wr->domain[0]) { char * id_domain = strchr(wr->route, '.'); @@ -3332,17 +3332,17 @@ static int commit_member(jk_ws_service_t } if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_REDIRECT, NULL, &arg, l)) == JK_TRUE) { - if (strncmp(wr->redirect, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->redirect, arg, JK_SHM_STR_SIZ )) { jk_log(l, JK_LOG_INFO, "Status worker '%s' changing 'redirect' for sub worker '%s' of lb worker '%s' from '%s' to '%s'", w->name, wr->name, lb_name, wr->redirect, arg); - strncpy(wr->redirect, arg, JK_SHM_STR_SIZ); + strncpy(wr->redirect, arg, JK_SHM_STR_SIZ ); *side_effect |= JK_STATUS_NEEDS_PUSH; } } if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_DOMAIN, NULL, &arg, l)) == JK_TRUE) { - if (strncmp(wr->domain, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->domain, arg, JK_SHM_STR_SIZ )) { jk_log(l, JK_LOG_INFO, "Status worker '%s' changing 'domain' for sub worker '%s' of lb worker '%s' from '%s' to '%s'", w->name, wr->name, lb_name, wr->domain, arg); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org