[lttng-dev] [BABELTRACE PATCH] Use 64-bit type for packet and content size

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Mon Feb 13 08:33:06 EST 2012


* Juha Niskanen (juniskane at gmail.com) wrote:
> Expression filestats.st_size * CHAR_BIT wraps around very easily
> when stored to 32-bit size_t. Currently BabelTrace cannot handle
> input larger than 256Mb because of this and diagnostic messages
> from this function can be incorrect because of overflow.
> 
> This patch fixes my immediate problem, but further work is needed
> for proper large file support i.e. handling files bigger than 2Gb.

Merged, thanks!

Mathieu

> 
> Signed-off-by: Juha Niskanen <juniskane at gmail.com>
> ---
>  formats/ctf/ctf.c              |    8 ++++----
>  include/babeltrace/ctf/types.h |    4 ++--
>  2 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c
> index 3ce428c..ea760f0 100644
> --- a/formats/ctf/ctf.c
> +++ b/formats/ctf/ctf.c
> @@ -1185,14 +1185,14 @@ int create_stream_packet_index(struct ctf_trace *td,
>  
>  		/* Validate content size and packet size values */
>  		if (packet_index.content_size > packet_index.packet_size) {
> -			fprintf(stderr, "[error] Content size (%zu bits) is larger than packet size (%zu bits).\n",
> +			fprintf(stderr, "[error] Content size (%" PRIu64 " bits) is larger than packet size (%" PRIu64 " bits).\n",
>  				packet_index.content_size, packet_index.packet_size);
>  			return -EINVAL;
>  		}
>  
> -		if (packet_index.packet_size > (filestats.st_size - packet_index.offset) * CHAR_BIT) {
> -			fprintf(stderr, "[error] Packet size (%zu bits) is larger than remaining file size (%zu bits).\n",
> -				packet_index.content_size, (size_t) (filestats.st_size - packet_index.offset) * CHAR_BIT);
> +		if (packet_index.packet_size > ((uint64_t)filestats.st_size - packet_index.offset) * CHAR_BIT) {
> +			fprintf(stderr, "[error] Packet size (%" PRIu64 " bits) is larger than remaining file size (%" PRIu64 " bits).\n",
> +				packet_index.content_size, ((uint64_t)filestats.st_size - packet_index.offset) * CHAR_BIT);
>  			return -EINVAL;
>  		}
>  
> diff --git a/include/babeltrace/ctf/types.h b/include/babeltrace/ctf/types.h
> index 12cca6e..9cbb338 100644
> --- a/include/babeltrace/ctf/types.h
> +++ b/include/babeltrace/ctf/types.h
> @@ -36,8 +36,8 @@ struct bt_stream_callbacks;
>  struct packet_index {
>  	off_t offset;		/* offset of the packet in the file, in bytes */
>  	off_t data_offset;	/* offset of data within the packet, in bits */
> -	size_t packet_size;	/* packet size, in bits */
> -	size_t content_size;	/* content size, in bits */
> +	uint64_t packet_size;	/* packet size, in bits */
> +	uint64_t content_size;	/* content size, in bits */
>  	uint64_t timestamp_begin;
>  	uint64_t timestamp_end;
>  	uint32_t events_discarded;
> -- 
> 1.7.4.1
> 
> 
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list