diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index b84ba348123c59701701ace2b7079feca6168c89..8b609f51d7a2f0621f25029eb0967dc8fee80fdb 100644 --- a/src/lib-sieve/sieve-storage-private.h +++ b/src/lib-sieve/sieve-storage-private.h @@ -121,7 +121,8 @@ struct sieve_storage { int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event, const struct sieve_storage *storage_class, const char *data, enum sieve_storage_flags flags, - bool main, struct sieve_storage **storage_r); + bool main, struct sieve_storage **storage_r, + enum sieve_error *error_code_r); int sieve_storage_setup_bin_path(struct sieve_storage *storage, mode_t mode); diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index 3558ae51ef2c7c1155a73bb125783c3463e2ba76..0437f47d439f1fdd826fbea593ab528de7fc3eff 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -320,12 +320,14 @@ sieve_storage_alloc_from_class(struct sieve_instance *svinst, int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event, const struct sieve_storage *storage_class, const char *data, enum sieve_storage_flags flags, - bool main, struct sieve_storage **storage_r) + bool main, struct sieve_storage **storage_r, + enum sieve_error *error_code_r) { struct sieve_storage *storage; int ret; *storage_r = NULL; + sieve_error_args_init(&error_code_r, NULL); if (event != NULL) event_ref(event); @@ -381,9 +383,10 @@ sieve_storage_init_real(struct sieve_instance *svinst, struct event *event, driver_event = sieve_storage_create_driver_event( event, storage_class->driver_name); ret = sieve_storage_alloc(svinst, driver_event, storage_class, - data, flags, main, &storage); + data, flags, main, &storage, error_code_r); event_unref(&driver_event); - i_assert(ret == 0); + if (ret < 0) + return -1; i_assert(storage != NULL); i_assert(storage_class->v.init != NULL); diff --git a/src/lib-sieve/storage/data/sieve-data-script.c b/src/lib-sieve/storage/data/sieve-data-script.c index 1162b38f10c56ff0f7e7f005a391634f9e5d67c9..45065a2d241fd92e1e9a1134bbc72ebac33341e1 100644 --- a/src/lib-sieve/storage/data/sieve-data-script.c +++ b/src/lib-sieve/storage/data/sieve-data-script.c @@ -39,8 +39,8 @@ sieve_data_script_create_from_input(struct sieve_instance *svinst, int ret; ret = sieve_storage_alloc(svinst, NULL, &sieve_data_storage, - "", 0, FALSE, &storage); - i_assert(ret == 0); + "", 0, FALSE, &storage, NULL); + i_assert(ret >= 0); dscript = sieve_data_script_alloc(); sieve_script_init(&dscript->script, storage, &sieve_data_script, diff --git a/src/lib-sieve/storage/file/sieve-file-storage.c b/src/lib-sieve/storage/file/sieve-file-storage.c index bb04272a4d8cb571d4c6499eb103d1ea22e8ec5b..95a3d4377f030a7af3fc3bbc1e59d7dbd141d6af 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.c +++ b/src/lib-sieve/storage/file/sieve-file-storage.c @@ -695,8 +695,9 @@ int sieve_file_storage_init_default(struct sieve_instance *svinst, int ret; ret = sieve_storage_alloc(svinst, NULL, &sieve_file_storage, - "", flags, TRUE, &storage); - i_assert(ret == 0); + "", flags, TRUE, &storage, error_code_r); + if (ret < 0) + return -1; fstorage = container_of(storage, struct sieve_file_storage, storage); T_BEGIN { @@ -727,8 +728,9 @@ int sieve_file_storage_init_from_path(struct sieve_instance *svinst, sieve_error_args_init(&error_code_r, NULL); ret = sieve_storage_alloc(svinst, NULL, &sieve_file_storage, - "", flags, FALSE, &storage); - i_assert(ret == 0); + "", flags, FALSE, &storage, error_code_r); + if (ret < 0) + return -1; fstorage = container_of(storage, struct sieve_file_storage, storage); T_BEGIN {