From fbf5c4ad68adb76917c4759f68fdb22560223d6b Mon Sep 17 00:00:00 2001
From: Filip Matusiak <filip.matusiak@iopsys.eu>
Date: Tue, 20 May 2025 12:59:25 +0200
Subject: [PATCH] Fix string length used for converting string to byte array
 with strtob

---
 src/agent.c           | 12 ++++++------
 src/agent_map.c       |  2 +-
 src/utils/1905_ubus.c |  5 +++--
 3 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/agent.c b/src/agent.c
index 1ca65a857..1ec43ccec 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -2426,7 +2426,7 @@ static void check_protocol(const char *framestr, uint8_t *protocol)
 	int len;
 
 	len = strlen(framestr);
-	len = (len - 1)/2;
+	len = len / 2;
 	frame = calloc(len, sizeof(uint8_t));
 	if (!frame)
 		return;
@@ -3158,7 +3158,7 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg)
 		framestr = (char *)blobmsg_data(data[1]);
 
 		len = strlen(framestr);
-		len = (len - 1) / 2;
+		len = len / 2;
 		frame = calloc(len, sizeof(uint8_t));
 		if (!frame)
 			return;
@@ -5986,8 +5986,8 @@ static void parse_beacon_params(struct ubus_request *req, int type,
 			int i, slen, esp_len;
 			int ac;		/* Access Category */
 
-			slen = strlen(iestr);
-			ie = calloc(slen/2, sizeof(uint8_t));
+			slen = strlen(iestr) / 2;
+			ie = calloc(slen, sizeof(uint8_t));
 			if (!ie) {
 				free(iestr);
 				return;
@@ -6037,8 +6037,8 @@ static void parse_beacon_params(struct ubus_request *req, int type,
 			uint8_t *ie;
 			int slen, len;
 
-			slen = strlen(iestr);
-			ie = calloc(slen / 2, sizeof(uint8_t));
+			slen = strlen(iestr) / 2;
+			ie = calloc(slen, sizeof(uint8_t));
 			if (!ie) {
 				free(iestr);
 				return;
diff --git a/src/agent_map.c b/src/agent_map.c
index 79d5e407e..6b7716d60 100644
--- a/src/agent_map.c
+++ b/src/agent_map.c
@@ -6220,7 +6220,7 @@ int prepare_tunneled_message(void *agent, const char *ifname,
 		return -1;
 
 	len = strlen(framestr);
-	len = (len - 1) / 2;
+	len = len / 2;
 	frame = calloc(len, sizeof(uint8_t));
 	if (!frame)
 		return -1;
diff --git a/src/utils/1905_ubus.c b/src/utils/1905_ubus.c
index a5b3f1763..31604b597 100644
--- a/src/utils/1905_ubus.c
+++ b/src/utils/1905_ubus.c
@@ -76,9 +76,9 @@ static void ieee1905_ubus_buildcmdu_cb(struct ubus_request *req,
 	dbg("|%s:%d| type = %u data = %s\n", __func__, __LINE__,
 			cmdu_type, data);
 
-	b_len = (strlen(data)/2) - 3;
+	b_len = strlen(data) / 2;
 
-	tlv = (uint8_t *) calloc(1, b_len);
+	tlv = (uint8_t *)calloc(1, b_len);
 	if (!tlv) {
 		err("%s: No memory\n", __func__);
 		ctx->status = -1;
@@ -87,6 +87,7 @@ static void ieee1905_ubus_buildcmdu_cb(struct ubus_request *req,
 
 	strtob(data, b_len, tlv);
 
+	b_len = b_len - 3;
 	*buff = cmdu_alloc_custom(cmdu_type, &mid, NULL, origin,
 			tlv, b_len);
 	free(tlv);
-- 
GitLab