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]