From d080521b9f7238eb73bcde247e2b77271b87e235 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Wed, 21 Feb 2018 02:08:54 +0000
Subject: [PATCH] Will now repair a SMB status header's 'last_msg' value if
 it's lower than the highest message number indexed.

---
 src/sbbs3/fixsmb.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/sbbs3/fixsmb.c b/src/sbbs3/fixsmb.c
index 2174229bd5..5ebdea38e3 100644
--- a/src/sbbs3/fixsmb.c
+++ b/src/sbbs3/fixsmb.c
@@ -108,6 +108,7 @@ int fixsmb(char* sub)
 	uint32_t*	numbers = NULL;
 	uint32_t	total = 0;
 	BOOL		dupe_msgnum;
+	uint32_t	highest = 0;
 
 	memset(&smb,0,sizeof(smb));
 
@@ -247,6 +248,8 @@ int fixsmb(char* sub)
 			msg.offset=n;
 			if(renumber)
 				msg.hdr.number=n+1;
+			if(msg.hdr.number > highest)
+				highest = msg.hdr.number;
 			if(msg.hdr.netattr&MSG_INTRANSIT) {
 				printf("Removing 'in transit' attribute\n");
 				msg.hdr.netattr&=~MSG_INTRANSIT;
@@ -282,9 +285,12 @@ int fixsmb(char* sub)
 	printf("\r%79s\r100%%\n","");
 	smb.status.total_msgs=n;
 	if(renumber)
-		smb.status.last_msg=n;
-	else
+		smb.status.last_msg = highest;
+	else {
+		if(highest > smb.status.last_msg)
+			smb.status.last_msg = highest;
 		sort_index(&smb);
+	}
 	printf("Saving message base status (%lu total messages).\n",n);
 	if((i=smb_putstatus(&smb))!=0)
 		printf("\nsmb_putstatus returned %d: %s\n",i,smb.last_error);
-- 
GitLab