From adf4a4d5d49c1090edc68c5eafb53fd63638bb81 Mon Sep 17 00:00:00 2001
From: Anjan Chanda <anjan.chanda@iopsys.eu>
Date: Fri, 25 Feb 2022 14:38:58 +0100
Subject: [PATCH] allow zero padded cmdus

---
 src/cmdu.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/cmdu.c b/src/cmdu.c
index c01d7de7..f0f76911 100644
--- a/src/cmdu.c
+++ b/src/cmdu.c
@@ -607,8 +607,14 @@ int cmdu_parse_tlv_single(struct cmdu_buff *c, struct tlv *tv[],
 	}
 
 	/* malformed cmdu if data remaining */
-	if (len)
-		return -1;
+	if (len) {
+		int k = 0;
+
+		while (k < len) {
+			if (c->data[c->datalen - len + k++] != 0)
+				return -1;
+		}
+	}
 
 	/* exactly one tlv must be present */
 	if (policy->present == TLV_PRESENT_ONE && !tv[0])
@@ -661,9 +667,15 @@ int cmdu_parse_tlvs(struct cmdu_buff *c, struct tlv *tv[][16],
 		}
 	}
 
-	/* malformed cmdu if data remaining */
-	if (len)
-		return -1;
+	/* malformed cmdu if data remaining; only allow zero padding */
+	if (len) {
+		int k = 0;
+
+		while (k < len) {
+			if (c->data[c->datalen - len + k++] != 0)
+				return -1;
+		}
+	}
 
 	/* strictly check against tlv policies */
 	for (i = 0; i < policy_len; i++) {
-- 
GitLab