From d431b4defbfde77d7fb9eaa44ef439e1b02b57bf Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Thu, 5 Sep 2019 18:12:44 -0400 Subject: [PATCH] bt2: field.py: add index check in `selected_option_index` setter of `_VariantField` Also, add corresponding test case. Signed-off-by: Francis Deslauriers Change-Id: Ia0b585adba02d71008f9f63298eb017db4a4fabb Reviewed-on: https://review.lttng.org/c/babeltrace/+/2006 Tested-by: jenkins Reviewed-by: Simon Marchi --- src/bindings/python/bt2/bt2/field.py | 3 +++ tests/bindings/python/bt2/test_field.py | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/src/bindings/python/bt2/bt2/field.py b/src/bindings/python/bt2/bt2/field.py index 7d5fdd83..56f94f0f 100644 --- a/src/bindings/python/bt2/bt2/field.py +++ b/src/bindings/python/bt2/bt2/field.py @@ -568,6 +568,9 @@ class _VariantField(_ContainerField, _Field): @selected_option_index.setter def selected_option_index(self, index): + if index < 0 or index >= len(self): + raise IndexError('{} field object index is out of range'.format(self._NAME)) + native_bt.field_variant_select_option_field_by_index(self._ptr, index) @property diff --git a/tests/bindings/python/bt2/test_field.py b/tests/bindings/python/bt2/test_field.py index f478515f..5a338801 100644 --- a/tests/bindings/python/bt2/test_field.py +++ b/tests/bindings/python/bt2/test_field.py @@ -1970,6 +1970,14 @@ class VariantFieldTestCase(unittest.TestCase): self._def.selected_option_index = 2 self.assertEqual(self._def.selected_option_index, 2) + def test_selected_option_index_above_range(self): + with self.assertRaises(IndexError): + self._def.selected_option_index = 4 + + def test_selected_option_index_below_range(self): + with self.assertRaises(IndexError): + self._def.selected_option_index = -1 + def test_selected_option(self): self._def.selected_option_index = 2 self._def.value = -17.34 -- 2.34.1