diff --git a/src/sbbs3/scfg/scfgnet.c b/src/sbbs3/scfg/scfgnet.c
index 83d5ad045230b9e9693bb2aba558f77eb44cef1a..c7036cf78dfe00e4f7f4091b024aeca85d15b05f 100644
--- a/src/sbbs3/scfg/scfgnet.c
+++ b/src/sbbs3/scfg/scfgnet.c
@@ -123,7 +123,7 @@ uint getsub(void)
 	static int sub_dflt,sub_bar;
 	char str[81];
 	int i,j,k;
-	uint subnum[MAX_OPTS+1];
+	uint subnum[MAX_OPTS+1] = {0};
 
 	while(1) {
 		i = getgrp("Select Message Group");
@@ -135,9 +135,9 @@ uint getsub(void)
 				subnum[k++]=j;
 			}
 		opt[k][0]=0;
-		sprintf(str,"Select %s Sub-board",cfg.grp[i]->sname);
+		snprintf(str, sizeof str, "Select %s Sub-board", cfg.grp[i]->sname);
 		j=uifc.list(WIN_RHT|WIN_BOT|WIN_SAV,0,0,45,&sub_dflt,&sub_bar,str,opt);
-		if(j==-1 || j >= cfg.total_subs)
+		if(j < 0 || j >= cfg.total_subs || j >= MAX_OPTS)
 			continue;
 		sub_dflt++;
 		sub_bar++;