* Juha Niskanen ([email protected]) 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 <[email protected]> > --- > 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 > [email protected] > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
