]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Always initialize struct fts_user
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 4 Aug 2021 12:50:54 +0000 (15:50 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 5 Aug 2021 12:34:46 +0000 (12:34 +0000)
Initializing lib-fts is still optional within it.

src/plugins/fts-lucene/fts-lucene-plugin.c
src/plugins/fts-solr/fts-solr-plugin.c
src/plugins/fts/fts-user.c
src/plugins/fts/fts-user.h

index 9a8647f95eac163703515854ec776e98b9a77e75..7c58fa7a4a002093d5e3d7dbcd65fe8749109af8 100644 (file)
@@ -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;
index 124269213176c96fe9e98517be8a64518d82bf8d..58997843303c92428d11d3ed68de637ddc397fb5 100644 (file)
@@ -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;
index ef2b3f2d85cdde588a2fd2c9c10cab43599c84f8..8f21bca80fb563b627947345288ee87654d0fe68 100644 (file)
@@ -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);
index 0ff86d6bd1362cd310ef05940660a380d1ef833d..e426d7b32c513cd8325f60628201b317198328d1 100644 (file)
@@ -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