diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 35d426ae1d015b87876212e3fe0eaccf42e38ad9..8b4342ccbdd9a498a65924b20c8f12b4d5fd256e 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -273,6 +273,7 @@ static int ftp_close_socket(SOCKET* sock, int line)
 static int sockprintf(SOCKET sock, char *fmt, ...)
 {
 	int		len;
+	int		maxlen;
 	int		result;
 	va_list argptr;
 	char	sbuf[1024];
@@ -280,13 +281,17 @@ static int sockprintf(SOCKET sock, char *fmt, ...)
 	struct timeval tv;
 
     va_start(argptr,fmt);
-    len=vsnprintf(sbuf,sizeof(sbuf),fmt,argptr);
-	sbuf[sizeof(sbuf)-1]=0;
+    len=vsnprintf(sbuf,maxlen=sizeof(sbuf)-2,fmt,argptr);
+    va_end(argptr);
+
+	if(len<0)		/* format error? */
+		return(0);
+	if(len>maxlen)	/* output truncated */
+		len=maxlen;
 	if(startup!=NULL && startup->options&FTP_OPT_DEBUG_TX)
-		lprintf(LOG_DEBUG,"%04d TX: %s", sock, sbuf);
-	strcat(sbuf,"\r\n");
+		lprintf(LOG_DEBUG,"%04d TX: %.*s", sock, len, sbuf);
+	memcpy(sbuf+len,"\r\n",2);
 	len+=2;
-    va_end(argptr);
 
 	if(sock==INVALID_SOCKET) {
 		lprintf(LOG_WARNING,"!INVALID SOCKET in call to sockprintf");
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index c33a623cf774ae8525b88889d78384de2ad3084b..547a8343445ff572472a258186491b2650e2b921 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -236,6 +236,7 @@ static void status(char* str)
 int sockprintf(SOCKET sock, char *fmt, ...)
 {
 	int		len;
+	int		maxlen;
 	int		result;
 	va_list argptr;
 	char	sbuf[1024];
@@ -243,13 +244,17 @@ int sockprintf(SOCKET sock, char *fmt, ...)
 	struct timeval tv;
 
     va_start(argptr,fmt);
-    len=vsnprintf(sbuf,sizeof(sbuf),fmt,argptr);
-	sbuf[sizeof(sbuf)-1]=0;
+    len=vsnprintf(sbuf,maxlen=sizeof(sbuf)-2,fmt,argptr);
+    va_end(argptr);
+
+	if(len<0)		/* format error? */
+		return(0);
+	if(len>maxlen)	/* output truncated */
+		len=maxlen;
 	if(startup->options&MAIL_OPT_DEBUG_TX)
-		lprintf(LOG_DEBUG,"%04d TX: %s", sock, sbuf);
-	strcat(sbuf,"\r\n");
+		lprintf(LOG_DEBUG,"%04d TX: %.*s", sock, len, sbuf);
+	memcpy(sbuf+len,"\r\n",2);
 	len+=2;
-    va_end(argptr);
 
 	if(sock==INVALID_SOCKET) {
 		lprintf(LOG_WARNING,"!INVALID SOCKET in call to sockprintf");