summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Antonuk <alan.antonuk@gmail.com>2016-03-08 19:41:29 -0800
committerAlan Antonuk <alan.antonuk@gmail.com>2016-04-09 20:23:06 -0700
commit2b76ba75a70740225ca8cb06627c163dffb20091 (patch)
tree7eb1388e7bd271964330a2b62e39236526ec353e
parentffc8c43962706454ebfa724fc9bccf3a47e9f7d1 (diff)
downloadrabbitmq-c-2b76ba75a70740225ca8cb06627c163dffb20091.tar.gz
Lib: check out of range args in amqp_*_close() fn.
Check for code parameter being between 0 -> UINT16_MAX in amqp_connection_close() and amqp_channel_close() functions.
-rw-r--r--librabbitmq/amqp_api.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/librabbitmq/amqp_api.c b/librabbitmq/amqp_api.c
index 9556ec5..ab60ee4 100644
--- a/librabbitmq/amqp_api.c
+++ b/librabbitmq/amqp_api.c
@@ -267,7 +267,11 @@ amqp_rpc_reply_t amqp_channel_close(amqp_connection_state_t state,
amqp_method_number_t replies[2] = { AMQP_CHANNEL_CLOSE_OK_METHOD, 0};
amqp_channel_close_t req;
- req.reply_code = code;
+ if (code < 0 || code > UINT16_MAX) {
+ return amqp_rpc_reply_error(AMQP_STATUS_INVALID_PARAMETER);
+ }
+
+ req.reply_code = (uint16_t)code;
req.reply_text.bytes = codestr;
req.reply_text.len = sprintf(codestr, "%d", code);
req.class_id = 0;
@@ -284,7 +288,11 @@ amqp_rpc_reply_t amqp_connection_close(amqp_connection_state_t state,
amqp_method_number_t replies[2] = { AMQP_CONNECTION_CLOSE_OK_METHOD, 0};
amqp_channel_close_t req;
- req.reply_code = code;
+ if (code < 0 || code > UINT16_MAX) {
+ return amqp_rpc_reply_error(AMQP_STATUS_INVALID_PARAMETER);
+ }
+
+ req.reply_code = (uint16_t)code;
req.reply_text.bytes = codestr;
req.reply_text.len = sprintf(codestr, "%d", code);
req.class_id = 0;