From: Michael M Slusarz Date: Mon, 17 Mar 2025 00:59:38 +0000 (-0700) Subject: fts-flatcurve: Ensure that mailbox parameters are always truncated before changing X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b655aa17b354fa32a53f7024bc423f3698907518;p=thirdparty%2Fdovecot%2Fcore.git fts-flatcurve: Ensure that mailbox parameters are always truncated before changing --- diff --git a/src/plugins/fts-flatcurve/fts-backend-flatcurve-xapian.cc b/src/plugins/fts-flatcurve/fts-backend-flatcurve-xapian.cc index aa65b3e544..32f79f40ca 100644 --- a/src/plugins/fts-flatcurve/fts-backend-flatcurve-xapian.cc +++ b/src/plugins/fts-flatcurve/fts-backend-flatcurve-xapian.cc @@ -257,8 +257,9 @@ void fts_flatcurve_xapian_deinit(struct flatcurve_fts_backend *backend) void *key, *val; while (hash_table_iterate(iter, x->optimize, &key, &val)) { - str_append(backend->boxname, (const char *)key); - str_append(backend->db_path, (const char *)val); + fts_backend_flatcurve_set_mailbox_params( + backend, (const char *)key, + (const char *)val, FALSE, NULL); if (fts_flatcurve_xapian_optimize_box( backend, &error) < 0) diff --git a/src/plugins/fts-flatcurve/fts-backend-flatcurve.c b/src/plugins/fts-flatcurve/fts-backend-flatcurve.c index c44707584f..e02bae005c 100644 --- a/src/plugins/fts-flatcurve/fts-backend-flatcurve.c +++ b/src/plugins/fts-flatcurve/fts-backend-flatcurve.c @@ -67,6 +67,14 @@ fts_backend_flatcurve_init(struct fts_backend *_backend, const char **error_r) return fts_backend_flatcurve_close_mailbox(backend, error_r); } +static void +fts_backend_flatcurve_clear_mailbox_params(struct flatcurve_fts_backend *backend) +{ + str_truncate(backend->boxname, 0); + str_truncate(backend->db_path, 0); + str_truncate(backend->volatile_dir, 0); +} + int fts_backend_flatcurve_close_mailbox(struct flatcurve_fts_backend *backend, const char **error_r) @@ -75,10 +83,7 @@ fts_backend_flatcurve_close_mailbox(struct flatcurve_fts_backend *backend, int ret = 0; if (str_len(backend->boxname) > 0) { ret = fts_flatcurve_xapian_close(backend, error_r); - - str_truncate(backend->boxname, 0); - str_truncate(backend->db_path, 0); - str_truncate(backend->volatile_dir, 0); + fts_backend_flatcurve_clear_mailbox_params(backend); } event_set_append_log_prefix(backend->event, FTS_FLATCURVE_DEBUG_PREFIX); @@ -141,21 +146,36 @@ fts_backend_flatcurve_set_mailbox(struct flatcurve_fts_backend *backend, return -1; } - str_append(backend->boxname, box->vname); - str_printfa(backend->db_path, "%s/%s/", path, FTS_FLATCURVE_LABEL); - storage = mailbox_get_storage(box); backend->parsed_lock_method = storage->set->parsed_lock_method; user = mail_storage_get_user(storage); volatile_dir = mail_user_get_volatile_dir(user); - if (volatile_dir != NULL) - str_append(backend->volatile_dir, volatile_dir); + + fts_backend_flatcurve_set_mailbox_params(backend, box->vname, path, + TRUE, volatile_dir); fts_flatcurve_xapian_set_mailbox(backend); return 0; } +void +fts_backend_flatcurve_set_mailbox_params(struct flatcurve_fts_backend *backend, + const char *box, const char *path, + bool append_path_label, + const char *volatile_dir) +{ + if (str_len(backend->boxname) > 0) + fts_backend_flatcurve_clear_mailbox_params(backend); + + str_append(backend->boxname, box); + str_append(backend->db_path, path); + if (append_path_label) + str_printfa(backend->db_path, "/%s/", FTS_FLATCURVE_LABEL); + if (volatile_dir != NULL) + str_append(backend->volatile_dir, volatile_dir); +} + static int fts_backend_flatcurve_get_last_uid(struct fts_backend *_backend, struct mailbox *box, uint32_t *last_uid_r) diff --git a/src/plugins/fts-flatcurve/fts-backend-flatcurve.h b/src/plugins/fts-flatcurve/fts-backend-flatcurve.h index 68abc4778c..2ae557bdc7 100644 --- a/src/plugins/fts-flatcurve/fts-backend-flatcurve.h +++ b/src/plugins/fts-flatcurve/fts-backend-flatcurve.h @@ -12,6 +12,8 @@ struct flatcurve_fts_backend { struct fts_backend backend; + /* MUST use fts_backend_flatcurve_set_mailbox_params() to set these + * values. */ string_t *boxname, *db_path, *volatile_dir; struct event *event; @@ -58,6 +60,11 @@ struct flatcurve_fts_result { int fts_backend_flatcurve_set_mailbox(struct flatcurve_fts_backend *backend, struct mailbox *box, const char **error_r); +void +fts_backend_flatcurve_set_mailbox_params(struct flatcurve_fts_backend *backend, + const char *box, const char *path, + bool append_path_label, + const char *volatile_dir); int fts_backend_flatcurve_close_mailbox(struct flatcurve_fts_backend *backend, const char **error_r);