From ea3620f272328c2116fb60332f8c50f5c7909a46 Mon Sep 17 00:00:00 2001 From: KrzysKond Date: Fri, 29 May 2026 22:43:05 -0700 Subject: [PATCH 1/2] fix: i2c value check --- mw/i2c_service/controller/ads7828/controller.cpp | 3 +++ mw/i2c_service/tests/test_ads7828.cc | 2 ++ 2 files changed, 5 insertions(+) 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..94c58b00 100644 --- a/mw/i2c_service/tests/test_ads7828.cc +++ b/mw/i2c_service/tests/test_ads7828.cc @@ -74,6 +74,8 @@ std::tuple>, std::optional // tuple INSTANTIATE_TEST_SUITE_P(GetAdcRawReadandVoltageTestParams, GetAdcRawReadandVoltageTest, ::testing::Values( std::make_tuple(0, std::optional>{}, std::optional{}, std::optional{}), + // Empty vector (i2c service closed mid-transaction, read() returned EOF): 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}, From 0d29f38e34d6c1173be3bfd1c62b45acb90ffe30 Mon Sep 17 00:00:00 2001 From: KrzysKond Date: Fri, 29 May 2026 22:48:14 -0700 Subject: [PATCH 2/2] fix lint --- mw/i2c_service/tests/test_ads7828.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mw/i2c_service/tests/test_ads7828.cc b/mw/i2c_service/tests/test_ads7828.cc index 94c58b00..bbf68533 100644 --- a/mw/i2c_service/tests/test_ads7828.cc +++ b/mw/i2c_service/tests/test_ads7828.cc @@ -74,8 +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{}), - // Empty vector (i2c service closed mid-transaction, read() returned EOF): must not crash - std::make_tuple(0, std::optional>{std::vector{}}, 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},