Author: rjung
Date: Thu Dec 25 18:36:11 2014
New Revision: 1647914

URL: http://svn.apache.org/r1647914
Log:
Add JK_MAX_NAME_SIZE define for maximal name
lengths (worker name, route, domain etc.).

Derive JK_SHM_STR_SZ from JK_MAX_NAME_SIZE.

Add JK_MAX_ATTRIBUTE_NAME_SIZE define and check
its correctness during startup.

Derive PARAM_BUFFER_SIZE from JK_MAX_NAME_SIZE
and JK_MAX_ATTRIBUTE_NAME_SIZE.

Docs for restriction coming from JK_MAX_NAME_SIZE
still needed. Note that this restriction was
already existing but more implicit.

I'll also add checks for correct length assumptions
in the worker validate functions.

Modified:
    tomcat/jk/trunk/native/apache-1.3/mod_jk.c
    tomcat/jk/trunk/native/apache-2.0/mod_jk.c
    tomcat/jk/trunk/native/common/jk_global.h
    tomcat/jk/trunk/native/common/jk_shm.h
    tomcat/jk/trunk/native/common/jk_util.c
    tomcat/jk/trunk/native/common/jk_util.h
    tomcat/jk/trunk/native/iis/jk_isapi_plugin.c

Modified: tomcat/jk/trunk/native/apache-1.3/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/apache-1.3/mod_jk.c?rev=1647914&r1=1647913&r2=1647914&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-1.3/mod_jk.c Thu Dec 25 18:36:11 2014
@@ -2975,9 +2975,16 @@ static void jk_init(server_rec * s, ap_p
     int rc;
     server_rec *srv = s;
     const char *err_string = NULL;
+    int remain;
     jk_server_conf_t *conf =
         (jk_server_conf_t *) ap_get_module_config(s->module_config,
                                                   &jk_module);
+    remain = jk_check_buffer_size();
+    if (remain < 0) {
+        jk_error_exit(APLOG_MARK, APLOG_EMERG, srv, p,
+                      "mod_jk: JK_MAX_ATTRIBUTE_NAME_SIZE in jk_util.c too 
small, "
+                      "increase by %d", -1 * remain);
+    }
     if (!jk_worker_properties)
         jk_map_alloc(&jk_worker_properties);
     jk_map_put(jk_worker_properties, "ServerRoot", ap_server_root, NULL);

Modified: tomcat/jk/trunk/native/apache-2.0/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/apache-2.0/mod_jk.c?rev=1647914&r1=1647913&r2=1647914&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-2.0/mod_jk.c Thu Dec 25 18:36:11 2014
@@ -3424,8 +3424,16 @@ static int jk_post_config(apr_pool_t * p
     jk_server_conf_t *conf;
     server_rec *srv = s;
     const char *err_string = NULL;
+    int remain;
     void *data = NULL;
 
+    remain = jk_check_buffer_size();
+    if (remain < 0) {
+        ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
+                     "mod_jk: JK_MAX_ATTRIBUTE_NAME_SIZE in jk_util.c too 
small, "
+                     "increase by %d", -1 * remain);
+        return HTTP_INTERNAL_SERVER_ERROR;
+    }
     apr_pool_userdata_get(&data, JK_LOG_LOCK_KEY, s->process->pool);
     if (data == NULL) {
         /* create the jk log lockfiles in the parent */

Modified: tomcat/jk/trunk/native/common/jk_global.h
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_global.h?rev=1647914&r1=1647913&r2=1647914&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_global.h (original)
+++ tomcat/jk/trunk/native/common/jk_global.h Thu Dec 25 18:36:11 2014
@@ -188,6 +188,8 @@ extern "C"
 #define JK_LF (10)
 #define JK_CR (13)
 
+#define JK_MAX_NAME_SIZE (60)
+
 #define JK_SESSION_IDENTIFIER "JSESSIONID"
 #define JK_PATH_SESSION_IDENTIFIER ";jsessionid"
 

Modified: tomcat/jk/trunk/native/common/jk_shm.h
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_shm.h?rev=1647914&r1=1647913&r2=1647914&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_shm.h (original)
+++ tomcat/jk/trunk/native/common/jk_shm.h Thu Dec 25 18:36:11 2014
@@ -42,7 +42,7 @@ extern "C"
 
 #define JK_SHM_MAJOR    '1'
 #define JK_SHM_MINOR    '3'
-#define JK_SHM_STR_SIZ  63
+#define JK_SHM_STR_SIZ  (JK_ALIGN(JK_MAX_NAME_SIZE + 1, 8) - 1)
 #define JK_SHM_MAGIC    '!', 'J', 'K', 'S', 'H', 'M', JK_SHM_MAJOR, 
JK_SHM_MINOR
 #define JK_SHM_MAGIC_SIZ  8
 

Modified: tomcat/jk/trunk/native/common/jk_util.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.c?rev=1647914&r1=1647913&r2=1647914&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_util.c (original)
+++ tomcat/jk/trunk/native/common/jk_util.c Thu Dec 25 18:36:11 2014
@@ -129,12 +129,12 @@
 #define LOG_BUFFER_SIZE 1024
 
 /*
- * Our longest worker attribute name is about 30 bytes,
- * so 100 bytes for "worker." plus worker name plus "."
- * plus attribute names leaves at least 60 bytes for
- * the worker names. That should be enough.
+ * Our longest worker attribute name is below 30 bytes.
+ * Add space for "worker.", another ".", the
+ * worker name and the final '\0'.
  */
-#define PARAM_BUFFER_SIZE 100
+#define JK_MAX_ATTRIBUTE_NAME_SIZE (30)
+#define PARAM_BUFFER_SIZE (JK_MAX_NAME_SIZE + 8 + JK_MAX_ATTRIBUTE_NAME_SIZE + 
1)
 #define MAKE_WORKER_PARAM(P) \
         { \
             size_t remain = PARAM_BUFFER_SIZE; \
@@ -1849,6 +1849,23 @@ int jk_is_deprecated_property(const char
     }
     return JK_FALSE;
 }
+
+int jk_check_buffer_size()
+{
+    const char **props;
+    size_t len = 0;
+    size_t max_len = 0;
+
+    props = &supported_properties[0];
+    while (*props) {
+        len = strlen(*props);
+        if (len > max_len)
+            max_len = len;
+        props++;
+    }
+    return JK_MAX_ATTRIBUTE_NAME_SIZE - max_len;
+}
+
 /*
  * Check that property is a valid one (to prevent user typos).
  * Only property starting with worker.

Modified: tomcat/jk/trunk/native/common/jk_util.h
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.h?rev=1647914&r1=1647913&r2=1647914&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_util.h (original)
+++ tomcat/jk/trunk/native/common/jk_util.h Thu Dec 25 18:36:11 2014
@@ -180,6 +180,8 @@ int jk_is_unique_property(const char *pr
 
 int jk_is_deprecated_property(const char *prp_name);
 
+int jk_check_buffer_size();
+    
 int jk_is_valid_property(const char *prp_name);
 
 int jk_get_worker_stdout(jk_map_t *m, const char *wname, const char 
**stdout_name);

Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?rev=1647914&r1=1647913&r2=1647914&view=diff
==============================================================================
--- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Thu Dec 25 18:36:11 2014
@@ -2943,8 +2943,15 @@ static int read_registry_init_data(void)
     int ok = JK_FALSE;
     LPVOID src;
     HKEY hkey;
+    int remain;
     jk_map_t *map = NULL;
 
+    remain = jk_check_buffer_size();
+    if (remain < 0) {
+        jk_log(logger, JK_LOG_ERROR,
+               "mod_jk: JK_MAX_ATTRIBUTE_NAME_SIZE in jk_util.c too small, "
+               "increase by %d", -1 * remain);
+    }
     if (jk_map_alloc(&map)) {
         if (jk_map_read_properties(map, jk_environment_map, ini_file_name, 
NULL,
                                    JK_MAP_HANDLE_DUPLICATES, logger)) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to