summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/mmrfc5424addhmac/mmrfc5424addhmac.c6
-rw-r--r--runtime/msg.c8
2 files changed, 11 insertions, 3 deletions
diff --git a/plugins/mmrfc5424addhmac/mmrfc5424addhmac.c b/plugins/mmrfc5424addhmac/mmrfc5424addhmac.c
index 6adad187..a7aea9b4 100644
--- a/plugins/mmrfc5424addhmac/mmrfc5424addhmac.c
+++ b/plugins/mmrfc5424addhmac/mmrfc5424addhmac.c
@@ -276,8 +276,11 @@ isHmacPresent(instanceData *pData, msg_t *pMsg)
uchar sdid[33]; /* RFC-based size limit */
MsgGetStructuredData(pMsg, &sdbuf, &sdlen);
-
found = 0;
+
+ if(sdbuf[0] == '-') /* RFC: struc data is empty! */
+ goto done;
+
i = 0;
while(i < sdlen && !found) {
getSDID(sdbuf, sdlen, &i, sdid);
@@ -288,6 +291,7 @@ isHmacPresent(instanceData *pData, msg_t *pMsg)
skipSDID(sdbuf, sdlen, &i);
}
+done:
return found;
}
diff --git a/runtime/msg.c b/runtime/msg.c
index 18f72086..85f83502 100644
--- a/runtime/msg.c
+++ b/runtime/msg.c
@@ -4073,10 +4073,14 @@ MsgAddToStructuredData(msg_t *pMsg, uchar *toadd, rs_size_t len)
uchar *newptr;
rs_size_t newlen;
DEFiRet;
- newlen = pMsg->lenStrucData + len;
+ newlen = (pMsg->pszStrucData[0] == '-') ? len : pMsg->lenStrucData + len;
CHKmalloc(newptr = (uchar*) realloc(pMsg->pszStrucData, newlen+1));
pMsg->pszStrucData = newptr;
- memcpy(pMsg->pszStrucData+pMsg->lenStrucData, toadd, len);
+ if(pMsg->pszStrucData[0] == '-') { /* empty? */
+ memcpy(pMsg->pszStrucData, toadd, len);
+ } else {
+ memcpy(pMsg->pszStrucData+pMsg->lenStrucData, toadd, len);
+ }
pMsg->pszStrucData[newlen] = '\0';
pMsg->lenStrucData = newlen;
finalize_it: