Skip to content

Commit

Permalink
quota: Contexts are now required or checked
Browse files Browse the repository at this point in the history
Satisfied static analyzers
  • Loading branch information
cmouse authored and mrannanj committed Feb 20, 2018
1 parent 86c9455 commit 3c18b20
Showing 1 changed file with 26 additions and 19 deletions.
45 changes: 26 additions & 19 deletions src/plugins/quota/quota-storage.c
Expand Up @@ -15,8 +15,10 @@

#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)

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand All @@ -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);

Expand All @@ -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);

Expand Down Expand Up @@ -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;

Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -392,14 +395,15 @@ 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;
const uoff_t *sizep;
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);

Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
Expand Down

0 comments on commit 3c18b20

Please sign in to comment.