diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c
index 0bc18c08d262977708d95f07cd39a71bc61b60b7..557e4610fa87c6d71ff4868a39a9de3fb592496a 100644
--- a/src/sbbs3/js_msgbase.c
+++ b/src/sbbs3/js_msgbase.c
@@ -504,7 +504,7 @@ static char* get_msg_text(smb_t* smb, smbmsg_t* msg, BOOL strip_ctrl_a, ulong mo
 		if((newbuf=malloc(strlen(buf)+1))!=NULL) {
 			int i,j;
 			for(i=j=0;buf[i];i++) {
-				if(buf[i]==CTRL_A)
+				if(buf[i]==CTRL_A && buf[i+1]!=0)
 					i++;
 				else newbuf[j++]=buf[i]; 
 			}
diff --git a/src/sbbs3/misc.c b/src/sbbs3/misc.c
index 20602772ec4ccf3458fb9eda2b1165b6be574df8..dd8f63094cb24fa5605a20751265f5567cc2bc1a 100644
--- a/src/sbbs3/misc.c
+++ b/src/sbbs3/misc.c
@@ -140,7 +140,7 @@ char* DLLCALL strip_ctrl(char *str)
 	int i,j;
 
 	for(i=j=0;str[i] && j<sizeof(tmp)-1;i++)
-		if(str[i]==CTRL_A)
+		if(str[i]==CTRL_A && str[i+1]!=0)
 			i++;
 		else if((uchar)str[i]>=SP)
 			tmp[j++]=str[i];
@@ -168,7 +168,7 @@ char* DLLCALL prep_file_desc(char *str)
 	int i,j;
 
 	for(i=j=0;str[i];i++)
-		if(str[i]==CTRL_A)
+		if(str[i]==CTRL_A && str[i+1]!=0)
 			i++;
 		else if(j && str[i]<=SP && tmp[j-1]==SP)
 			continue;
diff --git a/src/sbbs3/putmsg.cpp b/src/sbbs3/putmsg.cpp
index fa2f93e3efd3ec1a195f59b7a987f9eb75a0b723..59847be3997ea1c21f6ebfd130af47b3435fb93b 100644
--- a/src/sbbs3/putmsg.cpp
+++ b/src/sbbs3/putmsg.cpp
@@ -58,7 +58,7 @@ char sbbs_t::putmsg(char HUGE16 *str, long mode)
 	if(!(mode&P_SAVEATR))
 		attr(LIGHTGRAY);
 	while(str[l] && (mode&P_NOABORT || !msgabort()) && online) {
-		if(str[l]==CTRL_A) {
+		if(str[l]==CTRL_A && str[l+1]!=0) {
 			if(str[l+1]=='"' && !(sys_status&SS_NEST_PF)) {  /* Quote a file */
 				l+=2;
 				i=0;
diff --git a/src/sbbs3/qwknodes.c b/src/sbbs3/qwknodes.c
index f959805263c5f5dff1d1d6b27fad9ded8af15254..dfd26b9aa6627c5f61f4075864422f66788e8c5d 100644
--- a/src/sbbs3/qwknodes.c
+++ b/src/sbbs3/qwknodes.c
@@ -192,7 +192,7 @@ void stripctrla(uchar *str)
 	int i,j;
 
 for(i=j=0;str[i];i++) {
-	if(str[i]==CTRL_A)
+	if(str[i]==CTRL_A && str[i+1]!=0)
 		i++;
 	else
 		out[j++]=str[i]; }
diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp
index 5fb4df9512a3b471edcfdd62d7b5959ef411e319..99f3b03d0a9bbdef9c3ed9f824672c7ce6413818 100644
--- a/src/sbbs3/str.cpp
+++ b/src/sbbs3/str.cpp
@@ -49,8 +49,8 @@ char* DLLCALL remove_ctrl_a(char *instr, char *outstr)
 	char str[1024],*p;
 	uint i,j;
 
-	for(i=j=0;instr[i];i++) {
-		if(instr[i]==CTRL_A)
+	for(i=j=0;instr[i] && j<sizeof(str)-1;i++) {
+		if(instr[i]==CTRL_A && instr[i+1]!=0)
 			i++;
 		else str[j++]=instr[i]; 
 	}