From: Jérémie Galarneau Date: Thu, 13 Feb 2014 19:42:36 +0000 (-0500) Subject: Fix: Unchecked array index when importing trace indexes X-Git-Tag: v1.2.0-rc1~3 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=51e0087fadefb86c71cf6a49eb558f81c7dd4561;ds=inline Fix: Unchecked array index when importing trace indexes import_stream_packet_index may access the streams array with an invalid stream_id index when a stream has an index but is not declared in the trace's metadata. Signed-off-by: Jérémie Galarneau --- diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 141f9bfa..6d21b876 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -1811,7 +1811,6 @@ static int import_stream_packet_index(struct ctf_trace *td, struct ctf_file_stream *file_stream) { - struct ctf_stream_declaration *stream; struct ctf_stream_pos *pos; struct ctf_packet_index ctf_index; struct ctf_packet_index_file_hdr index_hdr; @@ -1852,6 +1851,7 @@ int import_stream_packet_index(struct ctf_trace *td, while (fread(&ctf_index, index_hdr.packet_index_len, 1, pos->index_fp) == 1) { uint64_t stream_id; + struct ctf_stream_declaration *stream = NULL; memset(&index, 0, sizeof(index)); index.offset = be64toh(ctf_index.offset); @@ -1871,7 +1871,9 @@ int import_stream_packet_index(struct ctf_trace *td, } file_stream->parent.stream_id = stream_id; - stream = g_ptr_array_index(td->streams, stream_id); + if (stream_id < td->streams->len) { + stream = g_ptr_array_index(td->streams, stream_id); + } if (!stream) { fprintf(stderr, "[error] Stream %" PRIu64 " is not declared in metadata.\n",