Skip to content

Commit

Permalink
fts: Contexts are now required or checked
Browse files Browse the repository at this point in the history
Satisfied static analyzer
  • Loading branch information
cmouse authored and mrannanj committed Feb 20, 2018
1 parent a9c19bb commit 18e78d3
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 34 deletions.
1 change: 1 addition & 0 deletions src/plugins/fts/fts-parser-script.c
Expand Up @@ -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)
Expand Down
73 changes: 39 additions & 34 deletions src/plugins/fts/fts-storage.c
Expand Up @@ -21,10 +21,14 @@

#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"
Expand Down Expand Up @@ -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) {
Expand All @@ -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)
Expand Down Expand Up @@ -197,9 +201,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;

Expand Down Expand Up @@ -248,7 +252,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);
Expand Down Expand Up @@ -279,9 +283,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
Expand Down Expand Up @@ -311,7 +315,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);
Expand All @@ -334,7 +338,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;

Expand Down Expand Up @@ -364,8 +368,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;

Expand Down Expand Up @@ -408,7 +412,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)
Expand Down Expand Up @@ -462,8 +466,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)
Expand All @@ -479,8 +483,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;
Expand Down Expand Up @@ -519,7 +523,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) {
Expand Down Expand Up @@ -555,7 +559,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;

Expand All @@ -568,8 +572,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)
Expand Down Expand Up @@ -606,7 +610,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);
Expand Down Expand Up @@ -650,8 +654,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;
Expand Down Expand Up @@ -680,8 +684,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);
Expand Down Expand Up @@ -711,7 +715,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;
Expand All @@ -723,6 +727,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;
Expand All @@ -733,8 +738,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;
Expand All @@ -744,8 +749,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;
Expand Down Expand Up @@ -840,7 +845,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);
Expand Down Expand Up @@ -910,7 +915,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;
}
Expand Down
5 changes: 5 additions & 0 deletions src/plugins/fts/fts-user.c
Expand Up @@ -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;
Expand Down Expand Up @@ -305,6 +306,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;
}

Expand All @@ -313,6 +315,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;
}

Expand All @@ -321,13 +324,15 @@ 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;
}

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;
}

Expand Down

0 comments on commit 18e78d3

Please sign in to comment.