]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts-flatcurve: fts_backend_flatcurve_deinit() - Don't crash if init failed
authorMarco Bettini <marco.bettini@open-xchange.com>
Fri, 17 Jan 2025 11:05:24 +0000 (11:05 +0000)
committerMarco Bettini <marco.bettini@open-xchange.com>
Thu, 23 Jan 2025 10:06:20 +0000 (10:06 +0000)
When fts_backend_flatcurve_init() fails to find the user,
the fields are not initialized, with the exception of the event and
the preallocatd pool.

src/plugins/fts-flatcurve/fts-backend-flatcurve-xapian.cc
src/plugins/fts-flatcurve/fts-backend-flatcurve.c

index 6b195c1091b041bce7a4170cc26d55ca9f909d1b..129fa52eac3369967eb065c2f3bb82fdc645bef5 100644 (file)
@@ -234,6 +234,7 @@ void fts_flatcurve_xapian_deinit(struct flatcurve_fts_backend *backend)
        struct flatcurve_xapian *x = backend->xapian;
        const char *error;
 
+       i_assert(x != NULL);
        x->deinit = TRUE;
        if (hash_table_is_created(x->optimize)) {
                struct hash_iterate_context *iter =
index 3253a9c01289830f3b9e45844b52d48a396cfddc..c1807bdc9856107ace1c49fc25f15a41fe3ace86 100644 (file)
@@ -68,6 +68,7 @@ int
 fts_backend_flatcurve_close_mailbox(struct flatcurve_fts_backend *backend,
                                    const char **error_r)
 {
+       i_assert(backend->boxname != NULL);
        int ret = 0;
        if (str_len(backend->boxname) > 0) {
                ret = fts_flatcurve_xapian_close(backend, error_r);
@@ -98,10 +99,12 @@ static void fts_backend_flatcurve_deinit(struct fts_backend *_backend)
        struct flatcurve_fts_backend *backend =
                (struct flatcurve_fts_backend *)_backend;
 
-       int ret = fts_backend_flatcurve_close_mailbox(backend, &error);
-       fts_flatcurve_xapian_deinit(backend);
-       if (ret < 0)
-               e_error(backend->event, "%s", error);
+       if (backend->xapian != NULL) {
+               int ret = fts_backend_flatcurve_close_mailbox(backend, &error);
+               fts_flatcurve_xapian_deinit(backend);
+               if (ret < 0)
+                       e_error(backend->event, "%s", error);
+       }
 
        event_unref(&backend->event);
        pool_unref(&backend->pool);