]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Contexts are now required or checked
authorAki Tuomi <aki.tuomi@dovecot.fi>
Sun, 14 Jan 2018 18:18:45 +0000 (20:18 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 18 Jan 2018 08:41:18 +0000 (10:41 +0200)
Satisfied static analyzer

src/plugins/fts/fts-parser-script.c
src/plugins/fts/fts-storage.c
src/plugins/fts/fts-user.c

index c740767c4074678e058430192be84e334ef4e4d0..6befd0146f17abccb291ba317228f914f51a8612 100644 (file)
@@ -71,6 +71,7 @@ static int script_contents_read(struct mail_user *user)
        struct content *content;
        bool eof_seen = FALSE;
        int fd, ret = 0;
+       i_assert(suser != NULL);
 
        fd = script_connect(user, &path);
        if (fd == -1)
index d4a3944c741b496faa33eaa16d7458ab0e74b07a..4b68663097694fa59d012c6210ca73e403b9c22b 100644 (file)
 
 #define FTS_CONTEXT(obj) \
        MODULE_CONTEXT(obj, fts_storage_module)
+#define FTS_CONTEXT_REQUIRE(obj) \
+       MODULE_CONTEXT_REQUIRE(obj, fts_storage_module)
 #define FTS_MAIL_CONTEXT(obj) \
-       MODULE_CONTEXT(obj, fts_mail_module)
+       MODULE_CONTEXT_REQUIRE(obj, fts_mail_module)
 #define FTS_LIST_CONTEXT(obj) \
        MODULE_CONTEXT(obj, fts_mailbox_list_module)
+#define FTS_LIST_CONTEXT_REQUIRE(obj) \
+       MODULE_CONTEXT_REQUIRE(obj, fts_mailbox_list_module)
 
 #define INDEXER_SOCKET_NAME "indexer"
 #define INDEXER_HANDSHAKE "VERSION\tindexer\t1\t0\n"
@@ -74,7 +78,7 @@ static MODULE_CONTEXT_DEFINE_INIT(fts_mailbox_list_module,
 
 static int fts_mailbox_get_last_cached_seq(struct mailbox *box, uint32_t *seq_r)
 {
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(box->list);
        uint32_t seq1, seq2, last_uid;
 
        if (fts_backend_get_last_uid(flist->backend, box, &last_uid) < 0) {
@@ -95,7 +99,7 @@ static int
 fts_mailbox_get_status(struct mailbox *box, enum mailbox_status_items items,
                       struct mailbox_status *status_r)
 {
-       struct fts_mailbox *fbox = FTS_CONTEXT(box);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
        uint32_t seq;
 
        if (fbox->module_ctx.super.get_status(box, items, status_r) < 0)
@@ -196,9 +200,9 @@ fts_mailbox_search_init(struct mailbox_transaction_context *t,
                        enum mail_fetch_field wanted_fields,
                        struct mailbox_header_lookup_ctx *wanted_headers)
 {
-       struct fts_transaction_context *ft = FTS_CONTEXT(t);
-       struct fts_mailbox *fbox = FTS_CONTEXT(t->box);
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(t->box->list);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(t);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(t->box);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(t->box->list);
        struct mail_search_context *ctx;
        struct fts_search_context *fctx;
 
@@ -247,7 +251,7 @@ fts_mailbox_search_init(struct mailbox_transaction_context *t,
 
 static bool fts_mailbox_build_continue(struct mail_search_context *ctx)
 {
-       struct fts_search_context *fctx = FTS_CONTEXT(ctx);
+       struct fts_search_context *fctx = FTS_CONTEXT_REQUIRE(ctx);
        int ret;
 
        ret = fts_indexer_more(fctx->indexer_ctx);
@@ -278,9 +282,9 @@ static bool
 fts_mailbox_search_next_nonblock(struct mail_search_context *ctx,
                                 struct mail **mail_r, bool *tryagain_r)
 {
-       struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
        struct fts_search_context *fctx = FTS_CONTEXT(ctx);
-       struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
 
        if (fctx == NULL && ft->failed) {
                /* precaching already failed - stop now instead of potentially
@@ -310,7 +314,7 @@ static void
 fts_search_apply_results_level(struct mail_search_context *ctx,
                               struct mail_search_arg *args, unsigned int *idx)
 {
-       struct fts_search_context *fctx = FTS_CONTEXT(ctx);
+       struct fts_search_context *fctx = FTS_CONTEXT_REQUIRE(ctx);
        const struct fts_search_level *level;
 
        level = array_idx(&fctx->levels, *idx);
@@ -333,7 +337,7 @@ fts_search_apply_results_level(struct mail_search_context *ctx,
 
 static bool fts_mailbox_search_next_update_seq(struct mail_search_context *ctx)
 {
-       struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
        struct fts_search_context *fctx = FTS_CONTEXT(ctx);
        unsigned int idx;
 
@@ -363,8 +367,8 @@ static bool fts_mailbox_search_next_update_seq(struct mail_search_context *ctx)
 
 static int fts_mailbox_search_deinit(struct mail_search_context *ctx)
 {
-       struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
-       struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
        struct fts_search_context *fctx = FTS_CONTEXT(ctx);
        int ret = 0;
 
@@ -407,7 +411,7 @@ static int fts_mail_get_special(struct mail *_mail, enum mail_fetch_field field,
 {
        struct mail_private *mail = (struct mail_private *)_mail;
        struct fts_mail *fmail = FTS_MAIL_CONTEXT(mail);
-       struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
        const struct fts_score_map *scores;
 
        if (field != MAIL_FETCH_SEARCH_RELEVANCY || ft->scores == NULL)
@@ -461,8 +465,8 @@ fts_mail_precache_range(struct mailbox_transaction_context *trans,
 
 static int fts_mail_precache_init(struct mail *_mail)
 {
-       struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(_mail->box->list);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(_mail->box->list);
        uint32_t last_seq;
 
        if (fts_mailbox_get_last_cached_seq(_mail->box, &last_seq) < 0)
@@ -478,8 +482,8 @@ static int fts_mail_precache_init(struct mail *_mail)
 
 static void fts_mail_index(struct mail *_mail)
 {
-       struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(_mail->box->list);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(_mail->box->list);
 
        if (ft->failed)
                return;
@@ -518,7 +522,7 @@ static void fts_mail_precache(struct mail *_mail)
 {
        struct mail_private *mail = (struct mail_private *)_mail;
        struct fts_mail *fmail = FTS_MAIL_CONTEXT(mail);
-       struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
 
        fmail->module_ctx.super.precache(_mail);
        if (fmail->virtual_mail) {
@@ -554,7 +558,7 @@ fts_transaction_begin(struct mailbox *box,
                      enum mailbox_transaction_flags flags,
                      const char *reason)
 {
-       struct fts_mailbox *fbox = FTS_CONTEXT(box);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
        struct mailbox_transaction_context *t;
        struct fts_transaction_context *ft;
 
@@ -567,8 +571,8 @@ fts_transaction_begin(struct mailbox *box,
 
 static int fts_transaction_end(struct mailbox_transaction_context *t, const char **error_r)
 {
-       struct fts_transaction_context *ft = FTS_CONTEXT(t);
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(t->box->list);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(t);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(t->box->list);
        int ret = ft->failed ? -1 : 0;
 
        if (ft->failed)
@@ -605,7 +609,7 @@ static int fts_transaction_end(struct mailbox_transaction_context *t, const char
 
 static void fts_transaction_rollback(struct mailbox_transaction_context *t)
 {
-       struct fts_mailbox *fbox = FTS_CONTEXT(t->box);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(t->box);
        const char *error;
 
        (void)fts_transaction_end(t, &error);
@@ -649,8 +653,8 @@ static int
 fts_transaction_commit(struct mailbox_transaction_context *t,
                       struct mail_transaction_commit_changes *changes_r)
 {
-       struct fts_transaction_context *ft = FTS_CONTEXT(t);
-       struct fts_mailbox *fbox = FTS_CONTEXT(t->box);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(t);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(t->box);
        struct mailbox *box = t->box;
        bool autoindex;
        int ret = 0;
@@ -679,8 +683,8 @@ fts_transaction_commit(struct mailbox_transaction_context *t,
 static void fts_mailbox_sync_notify(struct mailbox *box, uint32_t uid,
                                    enum mailbox_sync_type sync_type)
 {
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
-       struct fts_mailbox *fbox = FTS_CONTEXT(box);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(box->list);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
 
        if (fbox->module_ctx.super.sync_notify != NULL)
                fbox->module_ctx.super.sync_notify(box, uid, sync_type);
@@ -710,7 +714,7 @@ static int fts_sync_deinit(struct mailbox_sync_context *ctx,
                           struct mailbox_sync_status *status_r)
 {
        struct mailbox *box = ctx->box;
-       struct fts_mailbox *fbox = FTS_CONTEXT(box);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
        struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
        bool optimize;
        int ret = 0;
@@ -722,6 +726,7 @@ static int fts_sync_deinit(struct mailbox_sync_context *ctx,
        ctx = NULL;
 
        if (optimize) {
+               i_assert(flist != NULL);
                if (fts_backend_optimize(flist->backend) < 0) {
                        mailbox_set_critical(box, "FTS optimize failed");
                        ret = -1;
@@ -732,8 +737,8 @@ static int fts_sync_deinit(struct mailbox_sync_context *ctx,
 
 static int fts_save_finish(struct mail_save_context *ctx)
 {
-       struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
-       struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
 
        if (fbox->module_ctx.super.save_finish(ctx) < 0)
                return -1;
@@ -743,8 +748,8 @@ static int fts_save_finish(struct mail_save_context *ctx)
 
 static int fts_copy(struct mail_save_context *ctx, struct mail *mail)
 {
-       struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
-       struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+       struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
+       struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
 
        if (fbox->module_ctx.super.copy(ctx, mail) < 0)
                return -1;
@@ -839,7 +844,7 @@ void fts_mailbox_allocated(struct mailbox *box)
 
 static void fts_mailbox_list_deinit(struct mailbox_list *list)
 {
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(list);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(list);
 
        if (flist->backend != NULL)
                fts_backend_deinit(&flist->backend);
@@ -909,7 +914,7 @@ fts_mailbox_list_created(struct mailbox_list *list)
 
 struct fts_backend *fts_mailbox_backend(struct mailbox *box)
 {
-       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
+       struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(box->list);
 
        return flist->backend;
 }
index d133d567d76763af2fd4170a5ef7da7b1aff5a58..0b650aad6e0a18ca2b87949cd0959826f29c76d0 100644 (file)
@@ -237,6 +237,7 @@ fts_user_language_find(struct mail_user *user,
        struct fts_user_language *const *user_langp;
        struct fts_user *fuser = FTS_USER_CONTEXT(user);
                
+       i_assert(fuser != NULL);
        array_foreach(&fuser->languages, user_langp) {
                if (strcmp((*user_langp)->lang->name, lang->name) == 0)
                        return *user_langp;
@@ -304,6 +305,7 @@ struct fts_language_list *fts_user_get_language_list(struct mail_user *user)
 {
        struct fts_user *fuser = FTS_USER_CONTEXT(user);
 
+       i_assert(fuser != NULL);
        return fuser->lang_list;
 }
 
@@ -312,6 +314,7 @@ fts_user_get_all_languages(struct mail_user *user)
 {
        struct fts_user *fuser = FTS_USER_CONTEXT(user);
 
+       i_assert(fuser != NULL);
        return &fuser->languages;
 }
 
@@ -320,6 +323,7 @@ fts_user_get_data_languages(struct mail_user *user)
 {
        struct fts_user *fuser = FTS_USER_CONTEXT(user);
 
+       i_assert(fuser != NULL);
        return &fuser->data_languages;
 }
 
@@ -327,6 +331,7 @@ struct fts_user_language *fts_user_get_data_lang(struct mail_user *user)
 {
        struct fts_user *fuser = FTS_USER_CONTEXT(user);
 
+       i_assert(fuser != NULL);
        return fuser->data_lang;
 }