diff --git a/libraries/AP_Common/Bitmask.h b/libraries/AP_Common/Bitmask.h index dfe179fbe9..0821f1086c 100644 --- a/libraries/AP_Common/Bitmask.h +++ b/libraries/AP_Common/Bitmask.h @@ -21,6 +21,8 @@ #include #include +#include + template class Bitmask { public: @@ -41,6 +43,7 @@ public: void set(uint16_t bit) { // ignore an invalid bit number if (bit >= numbits) { + AP::internalerror().error(AP_InternalError::error_t::bitmask_range); return; } uint16_t word = bit/32; @@ -75,6 +78,12 @@ public: bool get(uint16_t bit) const { uint16_t word = bit/32; uint8_t ofs = bit & 0x1f; +#if CONFIG_HAL_BOARD == HAL_BOARD_SITL + if (bit >= numbits) { + AP::internalerror().error(AP_InternalError::error_t::bitmask_range); + return false; + } +#endif return (bits[word] & (1U << ofs)) != 0; } diff --git a/libraries/AP_Common/tests/test_bitmask.cpp b/libraries/AP_Common/tests/test_bitmask.cpp index 971af68d52..17fac774f4 100644 --- a/libraries/AP_Common/tests/test_bitmask.cpp +++ b/libraries/AP_Common/tests/test_bitmask.cpp @@ -75,3 +75,5 @@ TEST(Bitmask, Assignment) } AP_GTEST_MAIN() + +int hal = 0; // bizarrely, this fixes an undefined-symbol error but doesn't raise a type exception. Yay.