From 51e0087fadefb86c71cf6a49eb558f81c7dd4561 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Thu, 13 Feb 2014 14:42:36 -0500 Subject: [PATCH] Fix: Unchecked array index when importing trace indexes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- formats/ctf/ctf.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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", -- 2.34.1