Fix: disallow re-using same event ID in same stream
[babeltrace.git] / formats / ctf / metadata / ctf-visitor-generate-io-struct.c
index 4515b53e437fb16238530f9371b20a745b79f2b2..98169457ffab32825580f57a0d79b7e8663a399d 100644 (file)
@@ -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;
This page took 0.023247 seconds and 4 git commands to generate.