diff --git a/src/MessageParser.cpp b/src/MessageParser.cpp index fe5931c8675c3d11dc0aec0b51ce41fb26fc9ac1..5d2de01b244c0be17b8fa2e732de2638198f1f82 100644 --- a/src/MessageParser.cpp +++ b/src/MessageParser.cpp @@ -154,8 +154,8 @@ Message MessageParser::parseECSSTC(uint8_t* data) { } String<CCSDSMaxMessageSize> MessageParser::composeECSS(const Message& message, uint16_t size) { - uint8_t headerSize = ((message.packetType == Message::TM) ? ECSSSecondaryTMHeaderSize : ECSSSecondaryTCHeaderSize); - uint8_t header[headerSize]; + // Unfortunately to avoid using VLAs, we will create an array with the maximum size. + uint8_t header[ECSSSecondaryTMHeaderSize]; if (message.packetType == Message::TC) { header[0] = ECSSPUSVersion << 4U; // Assign the pusVersion = 2 @@ -180,7 +180,7 @@ String<CCSDSMaxMessageSize> MessageParser::composeECSS(const Message& message, u header[10] = (ticks) & 0xffU; } - String<CCSDSMaxMessageSize> dataString(header, headerSize); + String<CCSDSMaxMessageSize> dataString(header, ((message.packetType == Message::TM) ? ECSSSecondaryTMHeaderSize : ECSSSecondaryTCHeaderSize)); dataString.append(message.data, message.dataSize); // Make sure to reach the requested size diff --git a/src/Services/EventReportService.cpp b/src/Services/EventReportService.cpp index 53dc18fb4d314d9a728d3f675a39cedd0253d7e0..1e3858d1c7759ba8808116931a57a7bc9c93780a 100644 --- a/src/Services/EventReportService.cpp +++ b/src/Services/EventReportService.cpp @@ -81,13 +81,9 @@ void EventReportService::enableReportGeneration(Message message) { * @todo: Report an error if length > numberOfEvents */ uint16_t length = message.readUint16(); - Event eventID[length]; - for (uint16_t i = 0; i < length; i++) { - eventID[i] = static_cast<Event>(message.readEnum16()); - } if (length <= numberOfEvents) { for (uint16_t i = 0; i < length; i++) { - stateOfEvents[static_cast<uint16_t>(eventID[i])] = true; + stateOfEvents[message.readEnum16()] = true; } } disabledEventsCount = stateOfEvents.size() - stateOfEvents.count(); @@ -101,13 +97,9 @@ void EventReportService::disableReportGeneration(Message message) { * @todo: Report an error if length > numberOfEvents */ uint16_t length = message.readUint16(); - Event eventID[length]; - for (uint16_t i = 0; i < length; i++) { - eventID[i] = static_cast<Event>(message.readEnum16()); - } if (length <= numberOfEvents) { for (uint16_t i = 0; i < length; i++) { - stateOfEvents[static_cast<uint16_t>(eventID[i])] = false; + stateOfEvents[message.readEnum16()] = false; } } disabledEventsCount = stateOfEvents.size() - stateOfEvents.count(); diff --git a/src/Services/StorageAndRetrievalService.cpp b/src/Services/StorageAndRetrievalService.cpp index 0f83c10ddc46e969d04e940c5a2ee2e98d9b260e..d2eee2a3d7855290e2b860eecee83c65631e87bf 100644 --- a/src/Services/StorageAndRetrievalService.cpp +++ b/src/Services/StorageAndRetrievalService.cpp @@ -534,7 +534,7 @@ void StorageAndRetrievalService::deletePacketStores(Message& request) { uint16_t numOfPacketStores = request.readUint16(); if (numOfPacketStores == 0) { int numOfPacketStoresToDelete = 0; - etl::string<ECSSPacketStoreIdSize> packetStoresToDelete[packetStores.size()]; + etl::string<ECSSPacketStoreIdSize> packetStoresToDelete[ECSSMaxPacketStores]; for (auto& packetStore : packetStores) { if (packetStore.second.storageStatus) { ErrorHandler::reportError(