From 4e752ebc939db830c9d7e7c763f415744c9fc688 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Tue, 10 Dec 2013 16:45:08 -0500 Subject: [PATCH] Fix: disallow re-using same event ID in same stream Signed-off-by: Mathieu Desnoyers --- .../ctf/metadata/ctf-visitor-generate-io-struct.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/formats/ctf/metadata/ctf-visitor-generate-io-struct.c b/formats/ctf/metadata/ctf-visitor-generate-io-struct.c index 4515b53e..98169457 100644 --- a/formats/ctf/metadata/ctf-visitor-generate-io-struct.c +++ b/formats/ctf/metadata/ctf-visitor-generate-io-struct.c @@ -268,6 +268,14 @@ struct ctf_stream_declaration *trace_stream_lookup(struct ctf_trace *trace, uint return g_ptr_array_index(trace->streams, stream_id); } +static +struct ctf_event_declaration *stream_event_lookup(struct ctf_stream_declaration *stream, uint64_t event_id) +{ + if (stream->events_by_id->len <= event_id) + return NULL; + return g_ptr_array_index(stream->events_by_id, event_id); +} + static struct ctf_clock *trace_clock_lookup(struct ctf_trace *trace, GQuark clock_name) { @@ -1885,6 +1893,13 @@ int ctf_event_visit(FILE *fd, int depth, struct ctf_node *node, fprintf(fd, "[error] %s: missing id field in event declaration\n", __func__); goto error; } + /* Disallow re-using the same event ID in the same stream */ + if (stream_event_lookup(event->stream, event->id)) { + ret = -EPERM; + fprintf(fd, "[error] %s: event ID %" PRIu64 " used more than once in stream %" PRIu64 "\n", + __func__, event->id, event->stream_id); + goto error; + } if (event->stream->events_by_id->len <= event->id) g_ptr_array_set_size(event->stream->events_by_id, event->id + 1); g_ptr_array_index(event->stream->events_by_id, event->id) = event; -- 2.34.1