From 55a61bd172426df1cf710de6bf955d32d7e315cf Mon Sep 17 00:00:00 2001
From: Nikos Strimpas <nikos-strimpas@outlook.com>
Date: Sun, 25 Sep 2022 09:06:22 +0000
Subject: [PATCH] Fix the vla warnings

---
 src/MessageParser.cpp                       |  6 +++---
 src/Services/EventReportService.cpp         | 12 ++----------
 src/Services/StorageAndRetrievalService.cpp |  2 +-
 3 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/src/MessageParser.cpp b/src/MessageParser.cpp
index fe5931c8..5d2de01b 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 53dc18fb..1e3858d1 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 0f83c10d..d2eee2a3 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(
-- 
GitLab