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

src/plugins/quota/quota-storage.c

index e229169be870d7a58e9300b650af1894d80f15e5..09b428cb0a27816f127b2e4f8280de4e098166a2 100644 (file)
 
 #define QUOTA_CONTEXT(obj) \
        MODULE_CONTEXT(obj, quota_storage_module)
+#define QUOTA_CONTEXT_REQUIRE(obj) \
+       MODULE_CONTEXT_REQUIRE(obj, quota_storage_module)
 #define QUOTA_MAIL_CONTEXT(obj) \
-       MODULE_CONTEXT(obj, quota_mail_module)
+       MODULE_CONTEXT_REQUIRE(obj, quota_mail_module)
 #define QUOTA_LIST_CONTEXT(obj) \
        MODULE_CONTEXT(obj, quota_mailbox_list_module)
 
@@ -73,10 +75,10 @@ static void quota_set_storage_error(struct quota_transaction_context *qt,
 static void quota_mail_expunge(struct mail *_mail)
 {
        struct mail_private *mail = (struct mail_private *)_mail;
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(_mail->box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(_mail->box);
        struct quota_user *quser = QUOTA_USER_CONTEXT(_mail->box->storage->user);
        union mail_module_context *qmail = QUOTA_MAIL_CONTEXT(mail);
-       struct quota_transaction_context *qt = QUOTA_CONTEXT(_mail->transaction);
+       struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(_mail->transaction);
        uoff_t size;
        int ret;
 
@@ -117,7 +119,7 @@ static int
 quota_get_status(struct mailbox *box, enum mailbox_status_items items,
                 struct mailbox_status *status_r)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
        struct quota_transaction_context *qt;
        int ret = 0;
 
@@ -148,7 +150,7 @@ quota_mailbox_transaction_begin(struct mailbox *box,
                                enum mailbox_transaction_flags flags,
                                const char *reason)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
        struct mailbox_transaction_context *t;
        struct quota_transaction_context *qt;
 
@@ -164,8 +166,8 @@ static int
 quota_mailbox_transaction_commit(struct mailbox_transaction_context *ctx,
                                 struct mail_transaction_commit_changes *changes_r)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
-       struct quota_transaction_context *qt = QUOTA_CONTEXT(ctx);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->box);
+       struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(ctx);
 
        i_assert(qt->tmp_mail == NULL);
 
@@ -181,8 +183,8 @@ quota_mailbox_transaction_commit(struct mailbox_transaction_context *ctx,
 static void
 quota_mailbox_transaction_rollback(struct mailbox_transaction_context *ctx)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
-       struct quota_transaction_context *qt = QUOTA_CONTEXT(ctx);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->box);
+       struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(ctx);
 
        i_assert(qt->tmp_mail == NULL);
 
@@ -216,6 +218,7 @@ quota_move_requires_check(struct mailbox *dest_box, struct mailbox *src_box)
        struct quota_user *quser = QUOTA_USER_CONTEXT(src_ns->user);
        struct quota_root *const *rootp;
 
+       i_assert(quser != NULL);
        array_foreach(&quser->quota->roots, rootp) {
                bool have_src_quota, have_dest_quota;
 
@@ -240,7 +243,7 @@ quota_move_requires_check(struct mailbox *dest_box, struct mailbox *src_box)
 static int quota_check(struct mail_save_context *ctx, struct mailbox *src_box)
 {
        struct mailbox_transaction_context *t = ctx->transaction;
-       struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
+       struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(t);
        enum quota_alloc_result ret;
 
        i_assert(!ctx->moving || src_box != NULL);
@@ -277,8 +280,8 @@ static int
 quota_copy(struct mail_save_context *ctx, struct mail *mail)
 {
        struct mailbox_transaction_context *t = ctx->transaction;
-       struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(t->box);
+       struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(t);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(t->box);
 
        /* we always want to know the mail size */
        mail_add_temp_wanted_fields(ctx->dest_mail, MAIL_FETCH_PHYSICAL_SIZE, NULL);
@@ -306,8 +309,8 @@ static int
 quota_save_begin(struct mail_save_context *ctx, struct istream *input)
 {
        struct mailbox_transaction_context *t = ctx->transaction;
-       struct quota_transaction_context *qt = QUOTA_CONTEXT(t);
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(t->box);
+       struct quota_transaction_context *qt = QUOTA_CONTEXT_REQUIRE(t);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(t->box);
        const char *error;
        uoff_t size;
 
@@ -357,7 +360,7 @@ quota_save_begin(struct mail_save_context *ctx, struct istream *input)
 
 static int quota_save_finish(struct mail_save_context *ctx)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->transaction->box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->transaction->box);
        struct mailbox *src_box;
 
        if (qbox->module_ctx.super.save_finish(ctx) < 0)
@@ -392,7 +395,7 @@ static void quota_mailbox_sync_commit(struct quota_mailbox *qbox)
 static void quota_mailbox_sync_notify(struct mailbox *box, uint32_t uid,
                                      enum mailbox_sync_type sync_type)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
        struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
        struct quota_user *quser = QUOTA_USER_CONTEXT(box->storage->user);
        const uint32_t *uids;
@@ -400,6 +403,7 @@ static void quota_mailbox_sync_notify(struct mailbox *box, uint32_t uid,
        unsigned int i, count;
        uoff_t size;
 
+       i_assert(quser != NULL);
        if (qbox->module_ctx.super.sync_notify != NULL)
                qbox->module_ctx.super.sync_notify(box, uid, sync_type);
 
@@ -498,7 +502,7 @@ static void quota_mailbox_sync_notify(struct mailbox *box, uint32_t uid,
 static int quota_mailbox_sync_deinit(struct mailbox_sync_context *ctx,
                                     struct mailbox_sync_status *status_r)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(ctx->box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(ctx->box);
        int ret;
 
        ret = qbox->module_ctx.super.sync_deinit(ctx, status_r);
@@ -523,9 +527,10 @@ static void quota_roots_flush(struct quota *quota)
 
 static void quota_mailbox_close(struct mailbox *box)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
        struct quota_user *quser = QUOTA_USER_CONTEXT(box->storage->user);
 
+       i_assert(quser != NULL);
        /* sync_notify() may be called outside sync_begin()..sync_deinit().
           make sure we apply changes at close time at latest. */
        quota_mailbox_sync_commit(qbox);
@@ -542,7 +547,7 @@ static void quota_mailbox_close(struct mailbox *box)
 
 static void quota_mailbox_free(struct mailbox *box)
 {
-       struct quota_mailbox *qbox = QUOTA_CONTEXT(box);
+       struct quota_mailbox *qbox = QUOTA_CONTEXT_REQUIRE(box);
 
        if (array_is_created(&qbox->expunge_uids)) {
                array_free(&qbox->expunge_uids);
@@ -587,6 +592,7 @@ static void quota_mailbox_list_deinit(struct mailbox_list *list)
 {
        struct quota_mailbox_list *qlist = QUOTA_LIST_CONTEXT(list);
 
+       i_assert(qlist != NULL);
        quota_remove_user_namespace(list->ns);
        qlist->module_ctx.super.deinit(list);
 }
@@ -601,6 +607,7 @@ struct quota *quota_get_mail_user_quota(struct mail_user *user)
 static void quota_user_deinit(struct mail_user *user)
 {
        struct quota_user *quser = QUOTA_USER_CONTEXT(user);
+       i_assert(quser != NULL);
        struct quota_settings *quota_set = quser->quota->set;
 
        quota_deinit(&quser->quota);