diff --git a/src/managesieve/main.c b/src/managesieve/main.c
index 186f107c42bf9e3072de5c3f31477d2c90f7952a..25fe6bc2462d4d57fcf3fc496c9fab74ca22b2dc 100644
--- a/src/managesieve/main.c
+++ b/src/managesieve/main.c
@@ -178,7 +178,7 @@ client_create_from_input(const struct mail_storage_service_input *input,
 		verbose_proctitle = TRUE;
 
 	if (client_create(fd_in, fd_out, input->session_id,
-			  event, mail_user, set, &client) < 0) {
+			  event, mail_user, set, &client, error_r) < 0) {
 		settings_free(set);
 		mail_user_unref(&mail_user);
 		event_unref(&event);
diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index 5989413340f5a74a56181a4404dc3f3b35f1a70c..2c07afea6624fab5c24336ad4b9d54b53718fd1f 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -105,7 +105,7 @@ client_get_storage(struct sieve_instance *svinst, struct event *event,
 int client_create(int fd_in, int fd_out, const char *session_id,
 		  struct event *event, struct mail_user *user,
 		  const struct managesieve_settings *set,
-		  struct client **client_r)
+		  struct client **client_r, const char **error_r)
 {
 	struct client *client;
 	struct sieve_environment svenv;
@@ -113,6 +113,9 @@ int client_create(int fd_in, int fd_out, const char *session_id,
 	struct sieve_storage *storage;
 	pool_t pool;
 
+	*client_r = NULL;
+	*error_r = NULL;
+
 	/* Initialize Sieve */
 
 	i_zero(&svenv);
@@ -124,6 +127,10 @@ int client_create(int fd_in, int fd_out, const char *session_id,
 
 	svinst = sieve_init(&svenv, &managesieve_sieve_callbacks,
 			    (void *) user, set->mail_debug);
+	if (svinst == NULL) {
+		*error_r = "Failed to initialize Sieve interpreter";
+		return -1;
+	}
 
 	/* Get Sieve storage */
 
diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h
index 4dad8b82ba7e80c28718e3d4cbe46f1c6475b71d..c06ccb50fd59480fb560e84994ee75e1bc716b63 100644
--- a/src/managesieve/managesieve-client.h
+++ b/src/managesieve/managesieve-client.h
@@ -94,7 +94,7 @@ extern unsigned int managesieve_client_count;
 int client_create(int fd_in, int fd_out, const char *session_id,
 		  struct event *event, struct mail_user *user,
 		  const struct managesieve_settings *set,
-		  struct client **client_r);
+		  struct client **client_r, const char **error_r);
 void client_create_finish(struct client *client);
 void client_destroy(struct client *client, const char *reason);