From: Philippe Proulx Date: Mon, 14 Mar 2016 22:57:39 +0000 (-0400) Subject: Fix: config: check for enum type member object value outside range X-Git-Url: https://git.efficios.com/?a=commitdiff_plain;h=2ad701f1c6e1a8858123e8a21ba7575617208afc;p=deliverable%2Fbarectf.git Fix: config: check for enum type member object value outside range Signed-off-by: Philippe Proulx --- diff --git a/barectf/config.py b/barectf/config.py index a5ff54c..2bca56d 100644 --- a/barectf/config.py +++ b/barectf/config.py @@ -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):