summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/amqp_producer.c2
-rw-r--r--librabbitmq/amqp_connection.c12
-rw-r--r--librabbitmq/amqp_consumer.c7
-rw-r--r--librabbitmq/amqp_framing.c330
-rw-r--r--librabbitmq/amqp_socket.c29
-rw-r--r--librabbitmq/amqp_table.c10
-rw-r--r--librabbitmq/amqp_tcp_socket.c8
-rw-r--r--librabbitmq/amqp_time.c2
-rw-r--r--librabbitmq/codegen.py8
9 files changed, 247 insertions, 161 deletions
diff --git a/examples/amqp_producer.c b/examples/amqp_producer.c
index 948d8f6..b6fca58 100644
--- a/examples/amqp_producer.c
+++ b/examples/amqp_producer.c
@@ -101,7 +101,7 @@ static void send_batch(amqp_connection_state_t conn,
{
uint64_t stop_time = now_microseconds();
- int total_delta = stop_time - start_time;
+ int total_delta = (int)(stop_time - start_time);
printf("PRODUCER - Message count: %d\n", message_count);
printf("Total time, milliseconds: %d\n", total_delta / 1000);
diff --git a/librabbitmq/amqp_connection.c b/librabbitmq/amqp_connection.c
index 54040ea..f8671ee 100644
--- a/librabbitmq/amqp_connection.c
+++ b/librabbitmq/amqp_connection.c
@@ -262,7 +262,7 @@ int amqp_handle_input(amqp_connection_state_t state,
/* do we have target_size data yet? if not, return with the
expectation that more will arrive */
if (state->inbound_offset < state->target_size) {
- return bytes_consumed;
+ return (int)bytes_consumed;
}
raw_frame = state->inbound_buffer.bytes;
@@ -284,7 +284,7 @@ int amqp_handle_input(amqp_connection_state_t state,
= amqp_d8(raw_frame, 7);
return_to_idle(state);
- return bytes_consumed;
+ return (int)bytes_consumed;
}
/* it's not a protocol header; fall through to process it as a
@@ -322,7 +322,7 @@ int amqp_handle_input(amqp_connection_state_t state,
/* do we have target_size data yet? if not, return with the
expectation that more will arrive */
if (state->inbound_offset < state->target_size) {
- return bytes_consumed;
+ return (int)bytes_consumed;
}
}
@@ -397,12 +397,12 @@ int amqp_handle_input(amqp_connection_state_t state,
}
return_to_idle(state);
- return bytes_consumed;
+ return (int)bytes_consumed;
}
default:
amqp_abort("Internal error: invalid amqp_connection_state_t->state %d", state->state);
- return bytes_consumed;
+ return (int)bytes_consumed;
}
}
@@ -519,7 +519,7 @@ static int amqp_frame_to_bytes(const amqp_frame_t *frame, amqp_bytes_t buffer,
return AMQP_STATUS_INVALID_PARAMETER;
}
- amqp_e32(out_frame, 3, out_frame_len);
+ amqp_e32(out_frame, 3, (uint32_t)out_frame_len);
amqp_e8(out_frame, HEADER_SIZE + out_frame_len, AMQP_FRAME_END);
encoded->bytes = out_frame;
diff --git a/librabbitmq/amqp_consumer.c b/librabbitmq/amqp_consumer.c
index cf08fd5..dca22f6 100644
--- a/librabbitmq/amqp_consumer.c
+++ b/librabbitmq/amqp_consumer.c
@@ -252,7 +252,12 @@ amqp_rpc_reply_t amqp_read_message(amqp_connection_state_t state,
if (0 == frame.payload.properties.body_size) {
message->body = amqp_empty_bytes;
} else {
- message->body = amqp_bytes_malloc(frame.payload.properties.body_size);
+ if (SIZE_MAX < frame.payload.properties.body_size) {
+ ret.reply_type = AMQP_RESPONSE_LIBRARY_EXCEPTION;
+ ret.library_error = AMQP_STATUS_NO_MEMORY;
+ goto error_out1;
+ }
+ message->body = amqp_bytes_malloc((size_t)frame.payload.properties.body_size);
if (NULL == message->body.bytes) {
ret.reply_type = AMQP_RESPONSE_LIBRARY_EXCEPTION;
ret.library_error = AMQP_STATUS_NO_MEMORY;
diff --git a/librabbitmq/amqp_framing.c b/librabbitmq/amqp_framing.c
index f080840..a042289 100644
--- a/librabbitmq/amqp_framing.c
+++ b/librabbitmq/amqp_framing.c
@@ -1218,13 +1218,15 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->server_properties), &offset);
if (res < 0) return res;
}
- if (!amqp_encode_32(encoded, &offset, m->mechanisms.len)
+ if (UINT32_MAX < m->mechanisms.len
+ || !amqp_encode_32(encoded, &offset, (uint32_t)m->mechanisms.len)
|| !amqp_encode_bytes(encoded, &offset, m->mechanisms))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_32(encoded, &offset, m->locales.len)
+ if (UINT32_MAX < m->locales.len
+ || !amqp_encode_32(encoded, &offset, (uint32_t)m->locales.len)
|| !amqp_encode_bytes(encoded, &offset, m->locales))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_START_OK_METHOD: {
amqp_connection_start_ok_t *m = (amqp_connection_start_ok_t *) decoded;
@@ -1232,132 +1234,146 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->client_properties), &offset);
if (res < 0) return res;
}
- if (!amqp_encode_8(encoded, &offset, m->mechanism.len)
+ if (UINT8_MAX < m->mechanism.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->mechanism.len)
|| !amqp_encode_bytes(encoded, &offset, m->mechanism))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_32(encoded, &offset, m->response.len)
+ if (UINT32_MAX < m->response.len
+ || !amqp_encode_32(encoded, &offset, (uint32_t)m->response.len)
|| !amqp_encode_bytes(encoded, &offset, m->response))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->locale.len)
+ if (UINT8_MAX < m->locale.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->locale.len)
|| !amqp_encode_bytes(encoded, &offset, m->locale))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_SECURE_METHOD: {
amqp_connection_secure_t *m = (amqp_connection_secure_t *) decoded;
- if (!amqp_encode_32(encoded, &offset, m->challenge.len)
+ if (UINT32_MAX < m->challenge.len
+ || !amqp_encode_32(encoded, &offset, (uint32_t)m->challenge.len)
|| !amqp_encode_bytes(encoded, &offset, m->challenge))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_SECURE_OK_METHOD: {
amqp_connection_secure_ok_t *m = (amqp_connection_secure_ok_t *) decoded;
- if (!amqp_encode_32(encoded, &offset, m->response.len)
+ if (UINT32_MAX < m->response.len
+ || !amqp_encode_32(encoded, &offset, (uint32_t)m->response.len)
|| !amqp_encode_bytes(encoded, &offset, m->response))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_TUNE_METHOD: {
amqp_connection_tune_t *m = (amqp_connection_tune_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->channel_max)) return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_32(encoded, &offset, m->frame_max)) return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_16(encoded, &offset, m->heartbeat)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_TUNE_OK_METHOD: {
amqp_connection_tune_ok_t *m = (amqp_connection_tune_ok_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->channel_max)) return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_32(encoded, &offset, m->frame_max)) return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_16(encoded, &offset, m->heartbeat)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_OPEN_METHOD: {
amqp_connection_open_t *m = (amqp_connection_open_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->virtual_host.len)
+ if (UINT8_MAX < m->virtual_host.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->virtual_host.len)
|| !amqp_encode_bytes(encoded, &offset, m->virtual_host))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->capabilities.len)
+ if (UINT8_MAX < m->capabilities.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->capabilities.len)
|| !amqp_encode_bytes(encoded, &offset, m->capabilities))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
if (m->insist) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_OPEN_OK_METHOD: {
amqp_connection_open_ok_t *m = (amqp_connection_open_ok_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->known_hosts.len)
+ if (UINT8_MAX < m->known_hosts.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->known_hosts.len)
|| !amqp_encode_bytes(encoded, &offset, m->known_hosts))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_CLOSE_METHOD: {
amqp_connection_close_t *m = (amqp_connection_close_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->reply_code)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->reply_text.len)
+ if (UINT8_MAX < m->reply_text.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->reply_text.len)
|| !amqp_encode_bytes(encoded, &offset, m->reply_text))
return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_16(encoded, &offset, m->class_id)) return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_16(encoded, &offset, m->method_id)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_CLOSE_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_BLOCKED_METHOD: {
amqp_connection_blocked_t *m = (amqp_connection_blocked_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->reason.len)
+ if (UINT8_MAX < m->reason.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->reason.len)
|| !amqp_encode_bytes(encoded, &offset, m->reason))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONNECTION_UNBLOCKED_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_CHANNEL_OPEN_METHOD: {
amqp_channel_open_t *m = (amqp_channel_open_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->out_of_band.len)
+ if (UINT8_MAX < m->out_of_band.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->out_of_band.len)
|| !amqp_encode_bytes(encoded, &offset, m->out_of_band))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CHANNEL_OPEN_OK_METHOD: {
amqp_channel_open_ok_t *m = (amqp_channel_open_ok_t *) decoded;
- if (!amqp_encode_32(encoded, &offset, m->channel_id.len)
+ if (UINT32_MAX < m->channel_id.len
+ || !amqp_encode_32(encoded, &offset, (uint32_t)m->channel_id.len)
|| !amqp_encode_bytes(encoded, &offset, m->channel_id))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CHANNEL_FLOW_METHOD: {
amqp_channel_flow_t *m = (amqp_channel_flow_t *) decoded;
bit_buffer = 0;
if (m->active) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CHANNEL_FLOW_OK_METHOD: {
amqp_channel_flow_ok_t *m = (amqp_channel_flow_ok_t *) decoded;
bit_buffer = 0;
if (m->active) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CHANNEL_CLOSE_METHOD: {
amqp_channel_close_t *m = (amqp_channel_close_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->reply_code)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->reply_text.len)
+ if (UINT8_MAX < m->reply_text.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->reply_text.len)
|| !amqp_encode_bytes(encoded, &offset, m->reply_text))
return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_16(encoded, &offset, m->class_id)) return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_16(encoded, &offset, m->method_id)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CHANNEL_CLOSE_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_ACCESS_REQUEST_METHOD: {
amqp_access_request_t *m = (amqp_access_request_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->realm.len)
+ if (UINT8_MAX < m->realm.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->realm.len)
|| !amqp_encode_bytes(encoded, &offset, m->realm))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1367,20 +1383,22 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
if (m->write) bit_buffer |= (1 << 3);
if (m->read) bit_buffer |= (1 << 4);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_ACCESS_REQUEST_OK_METHOD: {
amqp_access_request_ok_t *m = (amqp_access_request_ok_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_DECLARE_METHOD: {
amqp_exchange_declare_t *m = (amqp_exchange_declare_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->type.len)
+ if (UINT8_MAX < m->type.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->type.len)
|| !amqp_encode_bytes(encoded, &offset, m->type))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1394,36 +1412,40 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->arguments), &offset);
if (res < 0) return res;
}
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_DECLARE_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_DELETE_METHOD: {
amqp_exchange_delete_t *m = (amqp_exchange_delete_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
if (m->if_unused) bit_buffer |= (1 << 0);
if (m->nowait) bit_buffer |= (1 << 1);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_DELETE_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_BIND_METHOD: {
amqp_exchange_bind_t *m = (amqp_exchange_bind_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->destination.len)
+ if (UINT8_MAX < m->destination.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->destination.len)
|| !amqp_encode_bytes(encoded, &offset, m->destination))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->source.len)
+ if (UINT8_MAX < m->source.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->source.len)
|| !amqp_encode_bytes(encoded, &offset, m->source))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1433,21 +1455,24 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->arguments), &offset);
if (res < 0) return res;
}
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_BIND_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_UNBIND_METHOD: {
amqp_exchange_unbind_t *m = (amqp_exchange_unbind_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->destination.len)
+ if (UINT8_MAX < m->destination.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->destination.len)
|| !amqp_encode_bytes(encoded, &offset, m->destination))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->source.len)
+ if (UINT8_MAX < m->source.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->source.len)
|| !amqp_encode_bytes(encoded, &offset, m->source))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1457,15 +1482,16 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->arguments), &offset);
if (res < 0) return res;
}
- return offset;
+ return (int)offset;
}
case AMQP_EXCHANGE_UNBIND_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_DECLARE_METHOD: {
amqp_queue_declare_t *m = (amqp_queue_declare_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1479,27 +1505,31 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->arguments), &offset);
if (res < 0) return res;
}
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_DECLARE_OK_METHOD: {
amqp_queue_declare_ok_t *m = (amqp_queue_declare_ok_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_32(encoded, &offset, m->message_count)) return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_32(encoded, &offset, m->consumer_count)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_BIND_METHOD: {
amqp_queue_bind_t *m = (amqp_queue_bind_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1509,31 +1539,33 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->arguments), &offset);
if (res < 0) return res;
}
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_BIND_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_PURGE_METHOD: {
amqp_queue_purge_t *m = (amqp_queue_purge_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
if (m->nowait) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_PURGE_OK_METHOD: {
amqp_queue_purge_ok_t *m = (amqp_queue_purge_ok_t *) decoded;
if (!amqp_encode_32(encoded, &offset, m->message_count)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_DELETE_METHOD: {
amqp_queue_delete_t *m = (amqp_queue_delete_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1541,33 +1573,36 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
if (m->if_empty) bit_buffer |= (1 << 1);
if (m->nowait) bit_buffer |= (1 << 2);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_DELETE_OK_METHOD: {
amqp_queue_delete_ok_t *m = (amqp_queue_delete_ok_t *) decoded;
if (!amqp_encode_32(encoded, &offset, m->message_count)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_UNBIND_METHOD: {
amqp_queue_unbind_t *m = (amqp_queue_unbind_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
{
int res = amqp_encode_table(encoded, &(m->arguments), &offset);
if (res < 0) return res;
}
- return offset;
+ return (int)offset;
}
case AMQP_QUEUE_UNBIND_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_QOS_METHOD: {
amqp_basic_qos_t *m = (amqp_basic_qos_t *) decoded;
@@ -1576,18 +1611,20 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
bit_buffer = 0;
if (m->global) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_QOS_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_CONSUME_METHOD: {
amqp_basic_consume_t *m = (amqp_basic_consume_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ if (UINT8_MAX < m->consumer_tag.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->consumer_tag.len)
|| !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
@@ -1600,88 +1637,100 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
int res = amqp_encode_table(encoded, &(m->arguments), &offset);
if (res < 0) return res;
}
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_CONSUME_OK_METHOD: {
amqp_basic_consume_ok_t *m = (amqp_basic_consume_ok_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ if (UINT8_MAX < m->consumer_tag.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->consumer_tag.len)
|| !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_CANCEL_METHOD: {
amqp_basic_cancel_t *m = (amqp_basic_cancel_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ if (UINT8_MAX < m->consumer_tag.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->consumer_tag.len)
|| !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
if (m->nowait) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_CANCEL_OK_METHOD: {
amqp_basic_cancel_ok_t *m = (amqp_basic_cancel_ok_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ if (UINT8_MAX < m->consumer_tag.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->consumer_tag.len)
|| !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_PUBLISH_METHOD: {
amqp_basic_publish_t *m = (amqp_basic_publish_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
if (m->mandatory) bit_buffer |= (1 << 0);
if (m->immediate) bit_buffer |= (1 << 1);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_RETURN_METHOD: {
amqp_basic_return_t *m = (amqp_basic_return_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->reply_code)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->reply_text.len)
+ if (UINT8_MAX < m->reply_text.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->reply_text.len)
|| !amqp_encode_bytes(encoded, &offset, m->reply_text))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_DELIVER_METHOD: {
amqp_basic_deliver_t *m = (amqp_basic_deliver_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->consumer_tag.len)
+ if (UINT8_MAX < m->consumer_tag.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->consumer_tag.len)
|| !amqp_encode_bytes(encoded, &offset, m->consumer_tag))
return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_64(encoded, &offset, m->delivery_tag)) return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
if (m->redelivered) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_GET_METHOD: {
amqp_basic_get_t *m = (amqp_basic_get_t *) decoded;
if (!amqp_encode_16(encoded, &offset, m->ticket)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->queue.len)
+ if (UINT8_MAX < m->queue.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->queue.len)
|| !amqp_encode_bytes(encoded, &offset, m->queue))
return AMQP_STATUS_BAD_AMQP_DATA;
bit_buffer = 0;
if (m->no_ack) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_GET_OK_METHOD: {
amqp_basic_get_ok_t *m = (amqp_basic_get_ok_t *) decoded;
@@ -1689,21 +1738,24 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
bit_buffer = 0;
if (m->redelivered) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->exchange.len)
+ if (UINT8_MAX < m->exchange.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->exchange.len)
|| !amqp_encode_bytes(encoded, &offset, m->exchange))
return AMQP_STATUS_BAD_AMQP_DATA;
- if (!amqp_encode_8(encoded, &offset, m->routing_key.len)
+ if (UINT8_MAX < m->routing_key.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->routing_key.len)
|| !amqp_encode_bytes(encoded, &offset, m->routing_key))
return AMQP_STATUS_BAD_AMQP_DATA;
if (!amqp_encode_32(encoded, &offset, m->message_count)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_GET_EMPTY_METHOD: {
amqp_basic_get_empty_t *m = (amqp_basic_get_empty_t *) decoded;
- if (!amqp_encode_8(encoded, &offset, m->cluster_id.len)
+ if (UINT8_MAX < m->cluster_id.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)m->cluster_id.len)
|| !amqp_encode_bytes(encoded, &offset, m->cluster_id))
return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_ACK_METHOD: {
amqp_basic_ack_t *m = (amqp_basic_ack_t *) decoded;
@@ -1711,7 +1763,7 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
bit_buffer = 0;
if (m->multiple) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_REJECT_METHOD: {
amqp_basic_reject_t *m = (amqp_basic_reject_t *) decoded;
@@ -1719,24 +1771,24 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
bit_buffer = 0;
if (m->requeue) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_RECOVER_ASYNC_METHOD: {
amqp_basic_recover_async_t *m = (amqp_basic_recover_async_t *) decoded;
bit_buffer = 0;
if (m->requeue) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_RECOVER_METHOD: {
amqp_basic_recover_t *m = (amqp_basic_recover_t *) decoded;
bit_buffer = 0;
if (m->requeue) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_RECOVER_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_BASIC_NACK_METHOD: {
amqp_basic_nack_t *m = (amqp_basic_nack_t *) decoded;
@@ -1745,35 +1797,35 @@ int amqp_encode_method(amqp_method_number_t methodNumber,
if (m->multiple) bit_buffer |= (1 << 0);
if (m->requeue) bit_buffer |= (1 << 1);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_TX_SELECT_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_TX_SELECT_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_TX_COMMIT_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_TX_COMMIT_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_TX_ROLLBACK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_TX_ROLLBACK_OK_METHOD: {
- return offset;
+ return (int)offset;
}
case AMQP_CONFIRM_SELECT_METHOD: {
amqp_confirm_select_t *m = (amqp_confirm_select_t *) decoded;
bit_buffer = 0;
if (m->nowait) bit_buffer |= (1 << 0);
if (!amqp_encode_8(encoded, &offset, bit_buffer)) return AMQP_STATUS_BAD_AMQP_DATA;
- return offset;
+ return (int)offset;
}
case AMQP_CONFIRM_SELECT_OK_METHOD: {
- return offset;
+ return (int)offset;
}
default: return AMQP_STATUS_UNKNOWN_METHOD;
}
@@ -1805,29 +1857,31 @@ int amqp_encode_properties(uint16_t class_id,
switch (class_id) {
case 10: {
- return offset;
+ return (int)offset;
}
case 20: {
- return offset;
+ return (int)offset;
}
case 30: {
- return offset;
+ return (int)offset;
}
case 40: {
- return offset;
+ return (int)offset;
}
case 50: {
- return offset;
+ return (int)offset;
}
case 60: {
amqp_basic_properties_t *p = (amqp_basic_properties_t *) decoded;
if (flags & AMQP_BASIC_CONTENT_TYPE_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->content_type.len)
+ if (UINT8_MAX < p->content_type.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->content_type.len)
|| !amqp_encode_bytes(encoded, &offset, p->content_type))
return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_CONTENT_ENCODING_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->content_encoding.len)
+ if (UINT8_MAX < p->content_encoding.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->content_encoding.len)
|| !amqp_encode_bytes(encoded, &offset, p->content_encoding))
return AMQP_STATUS_BAD_AMQP_DATA;
}
@@ -1844,22 +1898,26 @@ int amqp_encode_properties(uint16_t class_id,
if (!amqp_encode_8(encoded, &offset, p->priority)) return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_CORRELATION_ID_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->correlation_id.len)
+ if (UINT8_MAX < p->correlation_id.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->correlation_id.len)
|| !amqp_encode_bytes(encoded, &offset, p->correlation_id))
return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_REPLY_TO_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->reply_to.len)
+ if (UINT8_MAX < p->reply_to.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->reply_to.len)
|| !amqp_encode_bytes(encoded, &offset, p->reply_to))
return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_EXPIRATION_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->expiration.len)
+ if (UINT8_MAX < p->expiration.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->expiration.len)
|| !amqp_encode_bytes(encoded, &offset, p->expiration))
return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_MESSAGE_ID_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->message_id.len)
+ if (UINT8_MAX < p->message_id.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->message_id.len)
|| !amqp_encode_bytes(encoded, &offset, p->message_id))
return AMQP_STATUS_BAD_AMQP_DATA;
}
@@ -1867,32 +1925,36 @@ int amqp_encode_properties(uint16_t class_id,
if (!amqp_encode_64(encoded, &offset, p->timestamp)) return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_TYPE_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->type.len)
+ if (UINT8_MAX < p->type.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->type.len)
|| !amqp_encode_bytes(encoded, &offset, p->type))
return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_USER_ID_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->user_id.len)
+ if (UINT8_MAX < p->user_id.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->user_id.len)
|| !amqp_encode_bytes(encoded, &offset, p->user_id))
return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_APP_ID_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->app_id.len)
+ if (UINT8_MAX < p->app_id.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->app_id.len)
|| !amqp_encode_bytes(encoded, &offset, p->app_id))
return AMQP_STATUS_BAD_AMQP_DATA;
}
if (flags & AMQP_BASIC_CLUSTER_ID_FLAG) {
- if (!amqp_encode_8(encoded, &offset, p->cluster_id.len)
+ if (UINT8_MAX < p->cluster_id.len
+ || !amqp_encode_8(encoded, &offset, (uint8_t)p->cluster_id.len)
|| !amqp_encode_bytes(encoded, &offset, p->cluster_id))
return AMQP_STATUS_BAD_AMQP_DATA;
}
- return offset;
+ return (int)offset;
}
case 90: {
- return offset;
+ return (int)offset;
}
case 85: {
- return offset;
+ return (int)offset;
}
default: return AMQP_STATUS_UNKNOWN_CLASS;
}
diff --git a/librabbitmq/amqp_socket.c b/librabbitmq/amqp_socket.c
index 2688580..ce0a053 100644
--- a/librabbitmq/amqp_socket.c
+++ b/librabbitmq/amqp_socket.c
@@ -134,7 +134,7 @@ amqp_os_socket_setsockopt(int sock, int level, int optname,
#ifdef _WIN32
/* the winsock setsockopt function has its 4th argument as a
const char * */
- return setsockopt(sock, level, optname, (const char *)optval, optlen);
+ return setsockopt(sock, level, optname, (const char *)optval, (int)optlen);
#else
return setsockopt(sock, level, optname, optval, optlen);
#endif
@@ -295,7 +295,7 @@ int amqp_poll_write(int fd, amqp_time_t deadline) {
return amqp_poll(fd, POLLOUT, deadline);
}
-static int do_poll(amqp_connection_state_t state, int res,
+static ssize_t do_poll(amqp_connection_state_t state, ssize_t res,
amqp_time_t deadline) {
int fd = amqp_get_sockfd(state);
if (-1 == fd) {
@@ -419,7 +419,11 @@ int amqp_open_socket_inner(char const *hostname,
continue;
}
+#ifdef _WIN32
+ res = connect(sockfd, addr->ai_addr, (int)addr->ai_addrlen);
+#else
res = connect(sockfd, addr->ai_addr, addr->ai_addrlen);
+#endif
if (0 == res) {
last_error = AMQP_STATUS_OK;
@@ -432,8 +436,13 @@ int amqp_open_socket_inner(char const *hostname,
int result;
socklen_t result_len = sizeof(result);
- if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &result, &result_len) <
- 0 || result != 0) {
+#ifdef _WIN32
+ if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char *)&result,
+ (int *)&result_len) < 0
+#else
+ if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &result, &result_len) < 0
+#endif
+ || result != 0) {
last_error = AMQP_STATUS_SOCKET_ERROR;
} else {
last_error = AMQP_STATUS_OK;
@@ -467,7 +476,7 @@ int amqp_open_socket_inner(char const *hostname,
int amqp_send_header(amqp_connection_state_t state)
{
- int res;
+ ssize_t res;
static const uint8_t header[8] = { 'A', 'M', 'Q', 'P', 0,
AMQP_PROTOCOL_VERSION_MAJOR,
AMQP_PROTOCOL_VERSION_MINOR,
@@ -477,7 +486,7 @@ int amqp_send_header(amqp_connection_state_t state)
if (sizeof(header) == res) {
return AMQP_STATUS_OK;
}
- return res;
+ return (int)res;
}
static amqp_bytes_t sasl_method_name(amqp_sasl_method_enum method)
@@ -631,7 +640,7 @@ static int consume_one_frame(amqp_connection_state_t state, amqp_frame_t *decode
static int recv_with_timeout(amqp_connection_state_t state, amqp_time_t timeout) {
- int res;
+ ssize_t res;
int fd;
start_recv:
@@ -645,7 +654,7 @@ start_recv:
}
switch (res) {
default:
- return res;
+ return (int)res;
case AMQP_PRIVATE_STATUS_SOCKET_NEEDREAD:
res = amqp_poll_read(fd, timeout);
break;
@@ -656,7 +665,7 @@ start_recv:
if (AMQP_STATUS_OK == res) {
goto start_recv;
}
- return res;
+ return (int)res;
}
state->sock_inbound_limit = res;
@@ -665,7 +674,7 @@ start_recv:
res = amqp_time_s_from_now(&state->next_recv_heartbeat,
amqp_heartbeat_recv(state));
if (AMQP_STATUS_OK != res) {
- return res;
+ return (int)res;
}
return AMQP_STATUS_OK;
}
diff --git a/librabbitmq/amqp_table.c b/librabbitmq/amqp_table.c
index 6fa6fd3..8cc312a 100644
--- a/librabbitmq/amqp_table.c
+++ b/librabbitmq/amqp_table.c
@@ -299,7 +299,7 @@ static int amqp_encode_array(amqp_bytes_t encoded,
}
}
- if (!amqp_encode_32(encoded, &start, *offset - start - 4)) {
+ if (!amqp_encode_32(encoded, &start, (uint32_t)(*offset - start - 4))) {
res = AMQP_STATUS_TABLE_TOO_BIG;
goto out;
}
@@ -320,7 +320,7 @@ int amqp_encode_table(amqp_bytes_t encoded,
*offset += 4; /* size of the table gets filled in later on */
for (i = 0; i < input->num_entries; i++) {
- if (!amqp_encode_8(encoded, offset, input->entries[i].key.len)) {
+ if (!amqp_encode_8(encoded, offset, (uint8_t)input->entries[i].key.len)) {
res = AMQP_STATUS_TABLE_TOO_BIG;
goto out;
}
@@ -336,7 +336,7 @@ int amqp_encode_table(amqp_bytes_t encoded,
}
}
- if (!amqp_encode_32(encoded, &start, *offset - start - 4)) {
+ if (!amqp_encode_32(encoded, &start, (uint32_t)(*offset - start - 4))) {
res = AMQP_STATUS_TABLE_TOO_BIG;
goto out;
}
@@ -408,7 +408,7 @@ static int amqp_encode_field_value(amqp_bytes_t encoded,
same implementation, but different interpretations. */
/* fall through */
case AMQP_FIELD_KIND_BYTES:
- if (!amqp_encode_32(encoded, offset, entry->value.bytes.len)
+ if (!amqp_encode_32(encoded, offset, (uint32_t)entry->value.bytes.len)
|| !amqp_encode_bytes(encoded, offset, entry->value.bytes)) {
res = AMQP_STATUS_TABLE_TOO_BIG;
goto out;
@@ -460,7 +460,7 @@ int amqp_table_entry_cmp(void const *entry1, void const *entry2)
return d;
}
- return p1->key.len - p2->key.len;
+ return (int)p1->key.len - (int)p2->key.len;
}
static int
diff --git a/librabbitmq/amqp_tcp_socket.c b/librabbitmq/amqp_tcp_socket.c
index 74caee6..b70ccf0 100644
--- a/librabbitmq/amqp_tcp_socket.c
+++ b/librabbitmq/amqp_tcp_socket.c
@@ -61,7 +61,11 @@ amqp_tcp_socket_send(void *base, const void *buf, size_t len)
#endif
start:
+#ifdef _WIN32
+ res = send(self->sockfd, buf, (int)len, flags);
+#else
res = send(self->sockfd, buf, len, flags);
+#endif
if (res < 0) {
self->internal_error = amqp_os_socket_error();
@@ -94,7 +98,11 @@ amqp_tcp_socket_recv(void *base, void *buf, size_t len, int flags)
}
start:
+#ifdef _WIN32
+ ret = recv(self->sockfd, buf, (int)len, flags);
+#else
ret = recv(self->sockfd, buf, len, flags);
+#endif
if (0 > ret) {
self->internal_error = amqp_os_socket_error();
diff --git a/librabbitmq/amqp_time.c b/librabbitmq/amqp_time.c
index f083315..9bfbb16 100644
--- a/librabbitmq/amqp_time.c
+++ b/librabbitmq/amqp_time.c
@@ -199,7 +199,7 @@ int amqp_time_ms_until(amqp_time_t time) {
}
delta_ns = time.time_point_ns - now_ns;
- left_ms = delta_ns / AMQP_NS_PER_MS;
+ left_ms = (int)(delta_ns / AMQP_NS_PER_MS);
return left_ms;
}
diff --git a/librabbitmq/codegen.py b/librabbitmq/codegen.py
index 500745f..2c8861c 100644
--- a/librabbitmq/codegen.py
+++ b/librabbitmq/codegen.py
@@ -144,7 +144,9 @@ class StrType(object):
emitter.emit("}")
def encode(self, emitter, value):
- emitter.emit("if (!amqp_encode_%d(encoded, &offset, %s.len)" % (self.lenbits, value))
+ emitter.emit("if (UINT%d_MAX < %s.len" % (self.lenbits, value))
+ emitter.emit(" || !amqp_encode_%d(encoded, &offset, (uint%d_t)%s.len)" %
+ (self.lenbits, self.lenbits, value))
emitter.emit(" || !amqp_encode_bytes(encoded, &offset, %s))" % (value,))
emitter.emit(" return AMQP_STATUS_BAD_AMQP_DATA;")
@@ -323,7 +325,7 @@ def genErl(spec):
typeFor(spec, f).encode(emitter, "m->"+c_ize(f.name))
emitter.flush()
- print " return offset;"
+ print " return (int)offset;"
print " }"
def genEncodeProperties(c):
@@ -337,7 +339,7 @@ def genErl(spec):
typeFor(spec, f).encode(emitter, "p->"+c_ize(f.name))
emitter.emit("}")
- print " return offset;"
+ print " return (int)offset;"
print " }"
methods = spec.allMethods()