changeset 9857:0830fbbdfecd HEAD

settings: Don't crash if no namespaces or services have been created.
author Timo Sirainen <tss@iki.fi>
date Wed, 02 Sep 2009 17:45:35 -0400
parents 6103d925e018
children 2e502c0e23e7
files src/lib-storage/mail-storage-settings.c src/master/master-settings.c
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mail-storage-settings.c	Wed Sep 02 16:48:06 2009 -0400
+++ b/src/lib-storage/mail-storage-settings.c	Wed Sep 02 17:45:35 2009 -0400
@@ -347,7 +347,13 @@
 	}
 
 	if (ns->alias_for != NULL) {
-		namespaces = array_get(&ns->user_set->namespaces, &count);
+		if (array_is_created(&ns->user_set->namespaces)) {
+			namespaces = array_get(&ns->user_set->namespaces,
+					       &count);
+		} else {
+			namespaces = NULL;
+			count = 0;
+		}
 		for (i = 0; i < count; i++) {
 			if (strcmp(namespaces[i]->prefix, ns->alias_for) == 0)
 				break;
--- a/src/master/master-settings.c	Wed Sep 02 16:48:06 2009 -0400
+++ b/src/master/master-settings.c	Wed Sep 02 17:45:35 2009 -0400
@@ -278,11 +278,12 @@
 
 	/* check that we have at least one service. the actual service
 	   structure validity is checked later while creating them. */
-	services = array_get(&set->services, &count);
-	if (count == 0) {
+	if (!array_is_created(&set->services) ||
+	    array_count(&set->services) == 0) {
 		*error_r = "No services defined";
 		return FALSE;
 	}
+	services = array_get(&set->services, &count);
 	for (i = 0; i < count; i++) {
 		if (*services[i]->name == '\0') {
 			*error_r = t_strdup_printf(