diff options
author | Alan Antonuk <alan.antonuk@gmail.com> | 2015-03-18 22:39:23 -0700 |
---|---|---|
committer | Alan Antonuk <alan.antonuk@gmail.com> | 2015-05-04 23:40:34 -0700 |
commit | cab5da170ab4e4eba621ae9f14711a4f09e9760b (patch) | |
tree | d7f0f4d53755a677b107c6f98ae4841193449fd5 | |
parent | f462c0f4a6f471038ceb2097fb0bf4c4776957ac (diff) | |
download | rabbitmq-c-cab5da170ab4e4eba621ae9f14711a4f09e9760b.tar.gz |
Fix int truncation warnings on Win32
-rw-r--r-- | examples/amqp_producer.c | 2 | ||||
-rw-r--r-- | librabbitmq/amqp_connection.c | 12 | ||||
-rw-r--r-- | librabbitmq/amqp_consumer.c | 7 | ||||
-rw-r--r-- | librabbitmq/amqp_framing.c | 330 | ||||
-rw-r--r-- | librabbitmq/amqp_socket.c | 29 | ||||
-rw-r--r-- | librabbitmq/amqp_table.c | 10 | ||||
-rw-r--r-- | librabbitmq/amqp_tcp_socket.c | 8 | ||||
-rw-r--r-- | librabbitmq/amqp_time.c | 2 | ||||
-rw-r--r-- | librabbitmq/codegen.py | 8 |
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() |