diff --git a/src/sbbs3/scfg/scfg.c b/src/sbbs3/scfg/scfg.c
index b22e0f47fbbd60cf3455d5c19ae9de237e952b2e..6da280a6dfc9071a3b95c224161bca9e9f228d00 100644
--- a/src/sbbs3/scfg/scfg.c
+++ b/src/sbbs3/scfg/scfg.c
@@ -2444,8 +2444,10 @@ void* new_item(void* lp, size_t size, int index, int* total)
 
 	if((item = calloc(size, 1)) == NULL)
 		return NULL;
-	if((p = realloc(list, size * ((*total) + 1))) == NULL)
+	if((p = realloc(list, size * ((*total) + 1))) == NULL) {
+		free(item);
 		return NULL;
+	}
 	list = p;
 	for(int i = *total; i > index; --i)
 		list[i] = list[i - 1];