Author: mturk
Date: Thu Jun 28 23:49:28 2007
New Revision: 551810

URL: http://svn.apache.org/viewvc?view=rev&rev=551810
Log:
Properly handle low memory situations, by checking the return values from 
message allocation functions.

Modified:
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
    tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?view=diff&rev=551810&r1=551809&r2=551810
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Thu Jun 28 
23:49:28 2007
@@ -792,7 +792,18 @@
 
     JK_TRACE_ENTER(l);
     msg = jk_b_new(&ae->pool);
-    jk_b_set_buffer_size(msg, 16);      /* 16 is way too large but I'm lazy 
:-) */
+    if (!msg) {
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message");
+        JK_TRACE_EXIT(l);
+        return JK_FALSE;
+    }
+    if (jk_b_set_buffer_size(msg, 16)) {
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message buffer");
+        JK_TRACE_EXIT(l);
+        return JK_FALSE;
+    }
     jk_b_reset(msg);
     jk_b_append_byte(msg, AJP13_CPING_REQUEST);
 
@@ -1212,7 +1223,7 @@
         if (err ||
             ((rc = ajp_connection_tcp_send_message(ae, op->request, l)) != 
JK_TRUE)) {
             if (rc != JK_FATAL_ERROR) {
-                if (err == 1) {                
+                if (err == 1) {
                     jk_log(l, JK_LOG_DEBUG,
                            "(%s) failed sending request. "
                            "Will try another pooled connection",
@@ -1222,7 +1233,7 @@
                     jk_log(l, JK_LOG_INFO,
                            "(%s) error sending request. "
                            "Will try another pooled connection",
-                            ae->worker->name);                    
+                            ae->worker->name);
                 }
                 ajp_next_connection(ae, l);
             }
@@ -1828,15 +1839,54 @@
 
     p = e->endpoint_private;
     op->request = jk_b_new(&(p->pool));
-    jk_b_set_buffer_size(op->request, p->worker->max_packet_size);
+    if (!op->request) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;
+    }
+    if (jk_b_set_buffer_size(op->request, p->worker->max_packet_size)) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message buffer");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;
+    }
     jk_b_reset(op->request);
 
     op->reply = jk_b_new(&(p->pool));
-    jk_b_set_buffer_size(op->reply, p->worker->max_packet_size);
+    if (!op->reply) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;
+    }
+    if (jk_b_set_buffer_size(op->reply, p->worker->max_packet_size)) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message buffer");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;
+    }
     jk_b_reset(op->reply);
 
     op->post = jk_b_new(&(p->pool));
-    jk_b_set_buffer_size(op->post, p->worker->max_packet_size);
+    if (!op->post) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;
+    }
+    if (jk_b_set_buffer_size(op->post, p->worker->max_packet_size)) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message buffer");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;
+    }
     jk_b_reset(op->post);
 
     op->recoverable = JK_TRUE;

Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c?view=diff&rev=551810&r1=551809&r2=551810
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Thu Jun 28 23:49:28 
2007
@@ -909,7 +909,20 @@
 
     /* set the recovery post, for LB mode */
     s->reco_buf = jk_b_new(s->pool);
-    jk_b_set_buffer_size(s->reco_buf, p->worker->max_packet_size);
+    if (!s->reco_buf) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;        
+    }
+    if (jk_b_set_buffer_size(s->reco_buf, p->worker->max_packet_size)) {
+        *is_error = JK_HTTP_SERVER_ERROR;
+        jk_log(l, JK_LOG_ERROR,
+               "Failed allocating AJP message buffer");
+        JK_TRACE_EXIT(l);
+        return JK_SERVER_ERROR;        
+    }
     jk_b_reset(s->reco_buf);
     s->reco_status = RECO_INITED;
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to