Fix: config: check for enum type member object value outside range
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Mon, 14 Mar 2016 22:57:39 +0000 (18:57 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 17 Mar 2016 16:38:11 +0000 (12:38 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
barectf/config.py

index a5ff54c6c06bfb6606d1cc33b9af12eafd083265..2bca56d65efb2f9228d2ce5195ebf6bc5de8488b 100644 (file)
@@ -994,14 +994,30 @@ class _MetadataTypesHistologyValidator:
         if not t.members:
             raise ConfigError('enumeration type needs at least one member')
 
-        # no overlapping values
+        # no overlapping values and all values are valid considering
+        # the value type
         ranges = []
 
+        if t.value_type.signed:
+            value_min = -(1 << t.value_type.size - 1)
+            value_max = (1 << (t.value_type.size - 1)) - 1
+        else:
+            value_min = 0
+            value_max = (1 << t.value_type.size) - 1
+
         for label, value in t.members.items():
             for rg in ranges:
                 if value[0] <= rg[1] and rg[0] <= value[1]:
                     raise ConfigError('enumeration type\'s member "{}" overlaps another member'.format(label))
 
+            fmt = 'enumeration type\'s member "{}": value {} is outside the value type range [{}, {}]'
+
+            if value[0] < value_min or value[0] > value_max:
+                raise ConfigError(fmt.format(label, value[0], value_min, value_max))
+
+            if value[1] < value_min or value[1] > value_max:
+                raise ConfigError(fmt.format(label, value[1], value_min, value_max))
+
             ranges.append(value)
 
     def _validate_string_histology(self, t):
This page took 0.025664 seconds and 4 git commands to generate.