From fd7779f96ba474bf7c7778b32998f6f2a638b6df Mon Sep 17 00:00:00 2001 From: athatheocsd <athatheo@csd.auth.gr> Date: Wed, 5 Dec 2018 21:43:35 +0200 Subject: [PATCH] Protected against out of bounds array error and changed uint8_t to uint16_t --- inc/Services/EventReportService.hpp | 6 +++--- src/Services/EventReportService.cpp | 24 ++++++++++++------------ test/Services/EventReportService.cpp | 6 +++--- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/inc/Services/EventReportService.hpp b/inc/Services/EventReportService.hpp index 160123a2..454bd24b 100644 --- a/inc/Services/EventReportService.hpp +++ b/inc/Services/EventReportService.hpp @@ -17,7 +17,7 @@ class EventReportService : public Service { private: - static const uint8_t numberOfEvents = 7; // Might need to change the uint8_t + static const uint16_t numberOfEvents = 7; std::bitset<numberOfEvents> stateOfEvents; public: EventReportService() { @@ -118,13 +118,13 @@ public: * TC[5,5] request to enable report generation * Telecommand to enable the report generation of event definitions */ - void enableReportGeneration(uint8_t length, Event *eventID); + void enableReportGeneration(uint16_t length, Event *eventID); /** * TC[5,6] request to disable report generation * Telecommand to disable the report generation of event definitions */ - void disableReportGeneration(uint8_t length, Event *eventID); + void disableReportGeneration(uint16_t length, Event *eventID); /** * TC[5,7] request to report the disabled event definitions diff --git a/src/Services/EventReportService.cpp b/src/Services/EventReportService.cpp index 3e3c7af4..4d169014 100644 --- a/src/Services/EventReportService.cpp +++ b/src/Services/EventReportService.cpp @@ -48,27 +48,27 @@ EventReportService::highSeverityAnomalyReport(Event eventID, const uint8_t *data storeMessage(report); } -void EventReportService::enableReportGeneration(uint8_t length, Event *eventID) { +void EventReportService::enableReportGeneration(uint16_t length, Event *eventID) { // TC[5,5] /** * @todo: Report an error if length>numberOfEvents */ if (length <= numberOfEvents) { - for (uint8_t i = 0; i < length; i++) { - stateOfEvents[static_cast<uint8_t> (eventID[i])] = 1; + for (uint16_t i = 0; i < length; i++) { + stateOfEvents[static_cast<uint16_t> (eventID[i])] = 1; } } - } -void EventReportService::disableReportGeneration(uint8_t length, Event *eventID) { +void EventReportService::disableReportGeneration(uint16_t length, Event *eventID) { // TC[5,6] /** - * @todo: Add informationEventReport with notification if failed start of execution - * according to standard 6.5.5.2.e + * @todo: Report an error if length>numberOfEvents */ - for (uint8_t i = 0; i < length; i++) { - stateOfEvents[static_cast<uint8_t> (eventID[i])] = 0; + if (length <= numberOfEvents) { + for (uint16_t i = 0; i < length; i++) { + stateOfEvents[static_cast<uint16_t> (eventID[i])] = 0; + } } } @@ -83,11 +83,11 @@ void EventReportService::listOfDisabledEventsReport() { Message report = createTM(8); // Any chance we'll have more than uint8_t (>255 events) ? This will produce an error! - uint8_t numberOfDisabledEvents = stateOfEvents.size() - stateOfEvents.count(); + uint16_t numberOfDisabledEvents = stateOfEvents.size() - stateOfEvents.count(); report.appendByte(numberOfDisabledEvents); - for (uint8_t i = 0; i < stateOfEvents.size(); i++) { + for (uint16_t i = 0; i < stateOfEvents.size(); i++) { if (stateOfEvents[i] == 0) { - report.appendEnum8(i); + report.appendEnum16(i); } } diff --git a/test/Services/EventReportService.cpp b/test/Services/EventReportService.cpp index 3a351da9..e666b2d4 100644 --- a/test/Services/EventReportService.cpp +++ b/test/Services/EventReportService.cpp @@ -132,7 +132,7 @@ TEST_CASE("List of Disabled Events Report TM[5,8]", "[service][st05]") { CHECK(report.packetType == Message::TM); // packet type(TM = 0, TC = 1) REQUIRE(report.dataSize == 3); // Check for the information stored in report - CHECK(report.readByte() == 2); - CHECK(report.readEnum8() == 3); - CHECK(report.readEnum8() == 6); + CHECK(report.readHalfWord() == 2); + CHECK(report.readEnum16() == 3); + CHECK(report.readEnum16() == 6); } -- GitLab