Fix: config: check id (EH) and stream_id (PH) sizes
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 16 Mar 2016 01:07:48 +0000 (21:07 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 18 Mar 2016 21:54:59 +0000 (17:54 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
barectf/config.py

index 9646ccc9fd5041c9d83d7a0f66f2c0a9a1e44c2c..5e690b05f880cc937ce6421cab3e183354c3e6b0 100644 (file)
@@ -363,6 +363,10 @@ class _MetadataSpecialFieldsValidator:
 
                 if field_type.signed:
                     raise ConfigError('"stream_id" field in trace packet header type must be an unsigned integer type')
+
+                # "id" size can fit all event IDs
+                if len(self._meta.streams) > (1 << field_type.size):
+                    raise ConfigError('"stream_id" field\' size in trace packet header type is too small for the number of trace streams')
             elif field_name == 'uuid':
                 if self._meta.trace.uuid is None:
                     raise ConfigError('"uuid" field in trace packet header type specified, but no trace UUID provided')
@@ -513,16 +517,20 @@ class _MetadataSpecialFieldsValidator:
             if not ts.property_mappings:
                 raise ConfigError('"timestamp" field in stream event header type must be mapped to a clock')
 
-        # "id" is an unsigned integer type
         if 'id' in t.fields:
             eid = t.fields['id']
 
+            # "id" is an unsigned integer type
             if type(eid) is not metadata.Integer:
                 raise ConfigError('"id" field in stream event header type must be an integer type')
 
             if eid.signed:
                 raise ConfigError('"id" field in stream event header type must be an unsigned integer type')
 
+            # "id" size can fit all event IDs
+            if len(stream.events) > (1 << eid.size):
+                raise ConfigError('"id" field\' size in stream event header type is too small for the number of stream events')
+
     def _validate_stream(self, stream):
         self._validate_stream_packet_context(stream)
         self._validate_stream_event_header(stream)
This page took 0.024852 seconds and 4 git commands to generate.