summaryrefslogtreecommitdiff
path: root/librabbitmq/amqp_socket.c
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonygarnockjones@gmail.com>2010-04-16 11:05:35 +1200
committerTony Garnock-Jones <tonygarnockjones@gmail.com>2010-04-16 11:05:35 +1200
commitc3a1d3b60e7bf4913e971b80226ce04780d91594 (patch)
treeee72c7e4c2c6171ec8058fba06641e43be7f3225 /librabbitmq/amqp_socket.c
parentc49ffc97f70148fdb7b201d23e39c06a05575b59 (diff)
downloadrabbitmq-c-github-ask-c3a1d3b60e7bf4913e971b80226ce04780d91594.tar.gz
Check results of amqp_pool_alloc() and friends.
Diffstat (limited to 'librabbitmq/amqp_socket.c')
-rw-r--r--librabbitmq/amqp_socket.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c
index 09dc841..d16c319 100644
--- a/librabbitmq/amqp_socket.c
+++ b/librabbitmq/amqp_socket.c
@@ -140,6 +140,11 @@ static amqp_bytes_t sasl_response(amqp_pool_t *pool,
char *password = va_arg(args, char *);
size_t password_len = strlen(password);
amqp_pool_alloc_bytes(pool, strlen(username) + strlen(password) + 2, &response);
+ if (response.bytes == NULL) {
+ /* We never request a zero-length block, because of the +2
+ above, so a NULL here really is ENOMEM. */
+ return response;
+ }
*BUF_AT(response, 0) = 0;
memcpy(((char *) response.bytes) + 1, username, username_len);
*BUF_AT(response, username_len + 1) = 0;
@@ -317,6 +322,12 @@ amqp_rpc_reply_t amqp_simple_rpc(amqp_connection_state_t state,
amqp_frame_t *frame_copy = amqp_pool_alloc(&state->decoding_pool, sizeof(amqp_frame_t));
amqp_link_t *link = amqp_pool_alloc(&state->decoding_pool, sizeof(amqp_link_t));
+ if (frame_copy == NULL || link == NULL) {
+ result.reply_type = AMQP_RESPONSE_LIBRARY_EXCEPTION;
+ result.library_errno = ENOMEM;
+ return result;
+ }
+
*frame_copy = frame;
link->next = NULL;
@@ -370,7 +381,11 @@ static int amqp_login_inner(amqp_connection_state_t state,
{
amqp_bytes_t response_bytes = sasl_response(&state->decoding_pool, sasl_method, vl);
- amqp_connection_start_ok_t s =
+ amqp_connection_start_ok_t s;
+ if (response_bytes.bytes == NULL) {
+ return -ENOMEM;
+ }
+ s =
(amqp_connection_start_ok_t) {
.client_properties = {.num_entries = 0, .entries = NULL},
.mechanism = sasl_method_name(sasl_method),