From: Timo Sirainen Date: Wed, 4 Aug 2021 12:50:54 +0000 (+0300) Subject: fts: Always initialize struct fts_user X-Git-Tag: 2.3.17~248 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3eb404aa8ce404580c3028db89202f148a2eda3d;p=thirdparty%2Fdovecot%2Fcore.git fts: Always initialize struct fts_user Initializing lib-fts is still optional within it. --- diff --git a/src/plugins/fts-lucene/fts-lucene-plugin.c b/src/plugins/fts-lucene/fts-lucene-plugin.c index 9a8647f95e..7c58fa7a4a 100644 --- a/src/plugins/fts-lucene/fts-lucene-plugin.c +++ b/src/plugins/fts-lucene/fts-lucene-plugin.c @@ -96,8 +96,7 @@ static void fts_lucene_mail_user_deinit(struct mail_user *user) { struct fts_lucene_user *fuser = FTS_LUCENE_USER_CONTEXT_REQUIRE(user); - if (fuser->set.use_libfts) - fts_mail_user_deinit(user); + fts_mail_user_deinit(user); fuser->module_ctx.super.deinit(user); } @@ -116,11 +115,9 @@ static void fts_lucene_mail_user_created(struct mail_user *user) /* invalid settings, disabling */ return; } - if (fuser->set.use_libfts) { - if (fts_mail_user_init(user, &error) < 0) { - i_error("fts_lucene: %s", error); - return; - } + if (fts_mail_user_init(user, fuser->set.use_libfts, &error) < 0) { + i_error("fts_lucene: %s", error); + return; } fuser->module_ctx.super = *v; diff --git a/src/plugins/fts-solr/fts-solr-plugin.c b/src/plugins/fts-solr/fts-solr-plugin.c index 1242692131..5899784330 100644 --- a/src/plugins/fts-solr/fts-solr-plugin.c +++ b/src/plugins/fts-solr/fts-solr-plugin.c @@ -72,8 +72,7 @@ static void fts_solr_mail_user_deinit(struct mail_user *user) { struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT_REQUIRE(user); - if (fuser->set.use_libfts) - fts_mail_user_deinit(user); + fts_mail_user_deinit(user); fuser->module_ctx.super.deinit(user); } @@ -88,11 +87,9 @@ static void fts_solr_mail_user_create(struct mail_user *user, const char *env) /* invalid settings, disabling */ return; } - if (fuser->set.use_libfts) { - if (fts_mail_user_init(user, &error) < 0) { - i_error("fts-solr: %s", error); - return; - } + if (fts_mail_user_init(user, fuser->set.use_libfts, &error) < 0) { + i_error("fts-solr: %s", error); + return; } fuser->module_ctx.super = *v; diff --git a/src/plugins/fts/fts-user.c b/src/plugins/fts/fts-user.c index ef2b3f2d85..8f21bca80f 100644 --- a/src/plugins/fts/fts-user.c +++ b/src/plugins/fts/fts-user.c @@ -353,11 +353,28 @@ static void fts_user_free(struct fts_user *fuser) if (fuser->lang_list != NULL) fts_language_list_deinit(&fuser->lang_list); - array_foreach_elem(&fuser->languages, user_lang) - fts_user_language_free(user_lang); + if (array_is_created(&fuser->languages)) { + array_foreach_elem(&fuser->languages, user_lang) + fts_user_language_free(user_lang); + } } -int fts_mail_user_init(struct mail_user *user, const char **error_r) +static int +fts_mail_user_init_libfts(struct mail_user *user, struct fts_user *fuser, + const char **error_r) +{ + p_array_init(&fuser->languages, user->pool, 4); + + if (fts_user_init_languages(user, fuser, error_r) < 0 || + fts_user_init_data_language(user, fuser, error_r) < 0) + return -1; + if (fts_user_languages_fill_all(user, fuser, error_r) < 0) + return -1; + return 0; +} + +int fts_mail_user_init(struct mail_user *user, bool initialize_libfts, + const char **error_r) { struct fts_user *fuser = FTS_USER_CONTEXT(user); @@ -369,16 +386,11 @@ int fts_mail_user_init(struct mail_user *user, const char **error_r) fuser = p_new(user->pool, struct fts_user, 1); fuser->refcount = 1; - p_array_init(&fuser->languages, user->pool, 4); - - if (fts_user_init_languages(user, fuser, error_r) < 0 || - fts_user_init_data_language(user, fuser, error_r) < 0) { - fts_user_free(fuser); - return -1; - } - if (fts_user_languages_fill_all(user, fuser, error_r) < 0) { - fts_user_free(fuser); - return -1; + if (initialize_libfts) { + if (fts_mail_user_init_libfts(user, fuser, error_r) < 0) { + fts_user_free(fuser); + return -1; + } } MODULE_CONTEXT_SET(user, fts_user_module, fuser); diff --git a/src/plugins/fts/fts-user.h b/src/plugins/fts/fts-user.h index 0ff86d6bd1..e426d7b32c 100644 --- a/src/plugins/fts/fts-user.h +++ b/src/plugins/fts/fts-user.h @@ -18,7 +18,8 @@ struct fts_user_language *fts_user_get_data_lang(struct mail_user *user); const ARRAY_TYPE(fts_user_language) * fts_user_get_data_languages(struct mail_user *user); -int fts_mail_user_init(struct mail_user *user, const char **error_r); +int fts_mail_user_init(struct mail_user *user, bool initialize_libfts, + const char **error_r); void fts_mail_user_deinit(struct mail_user *user); #endif