diff --git a/pyangbind/plugin/pybind.py b/pyangbind/plugin/pybind.py index cb74ef35..5d4f5b2e 100644 --- a/pyangbind/plugin/pybind.py +++ b/pyangbind/plugin/pybind.py @@ -1359,7 +1359,9 @@ def build_elemtype(ctx, et, prefix=False): if position is not None: pos = position.arg else: - pos = 1 + max(allowed_bits) + pos = 1 + max(allowed_bits.values(), default=-1) + if pos < 0 or 4294967295 < pos: + raise ValueError("position out of bounds") allowed_bits[bit.arg] = pos cls = "restricted-bits" elemtype = { diff --git a/tests/bits/bits.yang b/tests/bits/bits.yang index 3a0256dc..d707681a 100644 --- a/tests/bits/bits.yang +++ b/tests/bits/bits.yang @@ -46,4 +46,11 @@ module bits { } default "flag1 flag3"; } + + // a leaf containing the bits type definition without position statement + leaf bits3 { + type bits { + bit position0; + } + } } diff --git a/tests/bits/run.py b/tests/bits/run.py index ebeff5ea..e8353005 100755 --- a/tests/bits/run.py +++ b/tests/bits/run.py @@ -56,6 +56,9 @@ def test_bits_position(self): self.instance.bits2.add("foo") self.assertEqual(str(self.instance.bits2), "foo bar baz") + def test_bits_no_position(self): + self.assertEqual(self.instance.bits3._allowed_bits["position0"], 0) + if __name__ == "__main__": unittest.main()