jcs
/subtext
/amendments
/608
fidopkt: Minor safety checks, fix format string
jcs made amendment 608 9 months ago
--- fidopkt.c Sat Dec 2 19:49:38 2023
+++ fidopkt.c Sat Dec 6 21:04:31 2025
@@ -138,22 +138,22 @@ fidopkt_parse_msgid(struct fidopkt_message *msg)
unsigned long id;
/* 37246.fsxnet_fsx_gen@21:1/137.1 28583dba */
- if (sscanf(msg->msgid_orig, "%49[^@]@%u:%u/%u.%u %lx",
+ if (sscanf(msg->msgid_orig, "%48[^@]@%u:%u/%u.%u %lx",
&garbage, &zone, &net, &node, &point, &id) == 6)
goto found;
/* 37246.fsxnet_fsx_gen@21:1/137 28583dba */
- if (sscanf(msg->msgid_orig, "%49[^@]@%u:%u/%u %lx",
+ if (sscanf(msg->msgid_orig, "%48[^@]@%u:%u/%u %lx",
&garbage, &zone, &net, &node, &id) == 5)
goto found;
/* 21:3/110.10@fsxnet 05996db9 */
- if (sscanf(msg->msgid_orig, "%u:%u/%u.%u@%49s %lx",
+ if (sscanf(msg->msgid_orig, "%u:%u/%u.%u@%48s %lx",
&zone, &net, &node, &point, &garbage, &id) == 6)
goto found;
/* 21:3/110@fsxnet 05996db9 */
- if (sscanf(msg->msgid_orig, "%u:%u/%u@%49s %lx",
+ if (sscanf(msg->msgid_orig, "%u:%u/%u@%48s %lx",
&zone, &net, &node, &garbage, &id) == 5)
goto found;
@@ -483,7 +483,7 @@ fidopkt_parse_message(char *packet_filename, struct fi
llen = strlcpy(ct, ctime(&ret->time), sizeof(ct));
ct[llen - 1] = '\0';
- logger_printf("[fidopkt] Date: %s UTC (%s %s%s) (%ul)", ct, datetime,
+ logger_printf("[fidopkt] Date: %s UTC (%s %s%s) (%lu)", ct, datetime,
(tzoff >= 0 ? "+" : ""), tz, ret->time);
logger_printf("[fidopkt] Message:");
@@ -696,7 +696,8 @@ fidopkt_encode_message(struct fidopkt_message *msg, ch
* \r\n during the message editor, so strip out \n.
*/
for (n = 0; n < msg->body_len; n++) {
- if (n == msg->body_len - 1 && msg->body[n] == '\r')
+ if (msg->body_len >= 1 && n == msg->body_len - 1 &&
+ msg->body[n] == '\r')
/* supress trailing \r, we'll add two next */
continue;
@@ -704,7 +705,7 @@ fidopkt_encode_message(struct fidopkt_message *msg, ch
break;
if (msg->body[n] == '\n') {
- if (msg->body[n - 1] == '\r')
+ if (n > 0 && msg->body[n - 1] == '\r')
continue;
buf[off++] = '\r';
} else