diff options
author | Alan Antonuk <alan.antonuk@gmail.com> | 2013-06-12 11:01:09 -0700 |
---|---|---|
committer | Alan Antonuk <alan.antonuk@gmail.com> | 2013-06-13 15:44:11 -0700 |
commit | f2094209844d44d7d6c6e7ce8328747acbb1ef1e (patch) | |
tree | d83b4f6e201a94a78a127301fdf4c40b334f476c /librabbitmq/amqp_socket.c | |
parent | 9496e10d76ffa5e6d021804722806e28af991769 (diff) | |
download | rabbitmq-c-github-ask-f2094209844d44d7d6c6e7ce8328747acbb1ef1e.tar.gz |
Don't abort() in amqp_simple_wait_frame()
amqp_simple_wait_method() should not call abort(), instead close the
underlying socket, then return AMQP_STATUS_WRONG_METHOD. This is still
rather heavy-handed for a public API, however, its a lot better than
killing the entire application
Diffstat (limited to 'librabbitmq/amqp_socket.c')
-rw-r--r-- | librabbitmq/amqp_socket.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c index cd9e75c..9ab9fec 100644 --- a/librabbitmq/amqp_socket.c +++ b/librabbitmq/amqp_socket.c @@ -318,23 +318,11 @@ int amqp_simple_wait_method(amqp_connection_state_t state, return res; } - if (frame.channel != expected_channel) { - amqp_abort("Expected 0x%08X method frame on channel %d, got frame on channel %d", - expected_method, - expected_channel, - frame.channel); - } - if (frame.frame_type != AMQP_FRAME_METHOD) { - amqp_abort("Expected 0x%08X method frame on channel %d, got frame type %d", - expected_method, - expected_channel, - frame.frame_type); - } - if (frame.payload.method.id != expected_method) { - amqp_abort("Expected method ID 0x%08X on channel %d, got ID 0x%08X", - expected_method, - expected_channel, - frame.payload.method.id); + if (frame.channel != expected_channel + || frame.frame_type != AMQP_FRAME_METHOD + || frame.payload.method.id != expected_method) { + amqp_socket_close(state->socket); + return AMQP_STATUS_WRONG_METHOD; } *output = frame.payload.method; return AMQP_STATUS_OK; |