diff --git a/fitparse/base.py b/fitparse/base.py index b0ebf87..07d796d 100644 --- a/fitparse/base.py +++ b/fitparse/base.py @@ -76,12 +76,15 @@ def add_dev_field_description(self, message): self._append_dev_data_id(dev_data_index) fields = self.dev_types[int(dev_data_index)]['fields'] + base_type = BASE_TYPES.get(base_type_id) + if base_type is None: + raise FitParseError("Unknown developer field base type: %s" % base_type_id) # Note that nothing in the spec says overwriting an existing field is invalid fields[field_def_num] = DevField( dev_data_index=dev_data_index, def_num=field_def_num, - type=BASE_TYPES[base_type_id], + type=base_type, name=field_name, units=units, native_field_num=native_field_num diff --git a/tests/test.py b/tests/test.py index e4851d5..c1440ef 100755 --- a/tests/test.py +++ b/tests/test.py @@ -74,6 +74,17 @@ def testfile(filename): class FitFileTestCase(unittest.TestCase): + def test_invalid_developer_base_type_raises_parse_error(self): + fit_data = generate_messages( + mesg_num=207, local_mesg_num=1, field_defs=[(3, 'uint8')], data=[[0]], + ) + generate_messages( + mesg_num=206, local_mesg_num=2, + field_defs=[(0, 'uint8'), (1, 'uint8'), (2, 'uint8')], data=[[0, 1, 255]], + ) + + with self.assertRaises(FitParseError): + FitFile(generate_fitfile(fit_data)).parse() + def test_basic_file_with_one_record(self, endian='<'): f = FitFile(generate_fitfile(endian=endian))