diff --git a/mw/i2c_service/controller/ads7828/controller.cpp b/mw/i2c_service/controller/ads7828/controller.cpp index c28d55e5..8e58af65 100644 --- a/mw/i2c_service/controller/ads7828/controller.cpp +++ b/mw/i2c_service/controller/ads7828/controller.cpp @@ -59,6 +59,9 @@ std::optional ADS7828::GetAdcRawRead(const uint8_t& channel) const { if (!res.has_value()) { return std::nullopt; } + if (res.value().size() != 2) { + return std::nullopt; + } uint16_t data = ((res.value()[0]) << 8); data |= res.value()[1]; return data; diff --git a/mw/i2c_service/tests/test_ads7828.cc b/mw/i2c_service/tests/test_ads7828.cc index 07ce56e5..bbf68533 100644 --- a/mw/i2c_service/tests/test_ads7828.cc +++ b/mw/i2c_service/tests/test_ads7828.cc @@ -74,6 +74,9 @@ std::tuple>, std::optional // tuple INSTANTIATE_TEST_SUITE_P(GetAdcRawReadandVoltageTestParams, GetAdcRawReadandVoltageTest, ::testing::Values( std::make_tuple(0, std::optional>{}, std::optional{}, std::optional{}), + // EOF from i2c_service (empty vector): must not crash + std::make_tuple(0, std::optional>{std::vector{}}, + std::optional{}, std::optional{}), std::make_tuple(1, std::optional>{{0, 1}}, std::optional{1}, std::optional{0.000805664051}), std::make_tuple(2, std::optional>{{1, 1}}, std::optional{257},