From 37e7b6543dbe262ffb310d8b131cfc7f8bf84acb Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Tue, 20 Oct 2015 13:57:48 +0200 Subject: [PATCH] doveadm sieve plugin: Fixed crashes caused by incorrect context allocation in the command implementations. The base context struct was allocated, rather than the (larger) command-specific context. Patch by Timo Sirainen. --- .../doveadm-sieve/doveadm-sieve-cmd-activate.c | 10 +++++----- .../doveadm-sieve/doveadm-sieve-cmd-get.c | 11 ++++++----- .../doveadm-sieve/doveadm-sieve-cmd-put.c | 16 ++++++++-------- .../doveadm-sieve/doveadm-sieve-cmd-rename.c | 10 +++++----- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c index 139f64a92..a8b4c6f39 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c @@ -107,12 +107,12 @@ static void cmd_sieve_activate_init static struct doveadm_mail_cmd_context * cmd_sieve_activate_alloc(void) { - struct doveadm_sieve_cmd_context *ctx; + struct doveadm_sieve_activate_cmd_context *ctx; - ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_cmd_context); - ctx->ctx.v.init = cmd_sieve_activate_init; - ctx->v.run = cmd_sieve_activate_run; - return &ctx->ctx; + ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_activate_cmd_context); + ctx->ctx.ctx.v.init = cmd_sieve_activate_init; + ctx->ctx.v.run = cmd_sieve_activate_run; + return &ctx->ctx.ctx; } static struct doveadm_mail_cmd_context * diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c index 0167be9f3..7aacbcf76 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c @@ -26,6 +26,7 @@ cmd_sieve_get_run(struct doveadm_sieve_cmd_context *_ctx) struct istream *input; enum sieve_error error; + return 0; script = sieve_storage_open_script (_ctx->storage, ctx->scriptname, &error); if ( script == NULL || sieve_script_get_stream @@ -60,13 +61,13 @@ static void cmd_sieve_get_init static struct doveadm_mail_cmd_context * cmd_sieve_get_alloc(void) { - struct doveadm_sieve_cmd_context *ctx; + struct doveadm_sieve_get_cmd_context *ctx; - ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_cmd_context); - ctx->ctx.v.init = cmd_sieve_get_init; - ctx->v.run = cmd_sieve_get_run; + ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_get_cmd_context); + ctx->ctx.ctx.v.init = cmd_sieve_get_init; + ctx->ctx.v.run = cmd_sieve_get_run; doveadm_print_init("pager"); - return &ctx->ctx; + return &ctx->ctx.ctx; } struct doveadm_mail_cmd doveadm_sieve_cmd_get = { diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c index 284a7ee40..c548b49d8 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c @@ -164,14 +164,14 @@ cmd_sieve_put_parse_arg(struct doveadm_mail_cmd_context *_ctx, int c) static struct doveadm_mail_cmd_context * cmd_sieve_put_alloc(void) { - struct doveadm_sieve_cmd_context *ctx; - - ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_cmd_context); - ctx->ctx.getopt_args = "a"; - ctx->ctx.v.parse_arg = cmd_sieve_put_parse_arg; - ctx->ctx.v.init = cmd_sieve_put_init; - ctx->v.run = cmd_sieve_put_run; - return &ctx->ctx; + struct doveadm_sieve_put_cmd_context *ctx; + + ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_put_cmd_context); + ctx->ctx.ctx.getopt_args = "a"; + ctx->ctx.ctx.v.parse_arg = cmd_sieve_put_parse_arg; + ctx->ctx.ctx.v.init = cmd_sieve_put_init; + ctx->ctx.v.run = cmd_sieve_put_run; + return &ctx->ctx.ctx; } struct doveadm_mail_cmd doveadm_sieve_cmd_put = { diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c index c470ed4ae..458963db9 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c @@ -63,12 +63,12 @@ static void cmd_sieve_rename_init static struct doveadm_mail_cmd_context * cmd_sieve_rename_alloc(void) { - struct doveadm_sieve_cmd_context *ctx; + struct doveadm_sieve_rename_cmd_context *ctx; - ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_cmd_context); - ctx->ctx.v.init = cmd_sieve_rename_init; - ctx->v.run = cmd_sieve_rename_run; - return &ctx->ctx; + ctx = doveadm_sieve_cmd_alloc(struct doveadm_sieve_rename_cmd_context); + ctx->ctx.ctx.v.init = cmd_sieve_rename_init; + ctx->ctx.v.run = cmd_sieve_rename_run; + return &ctx->ctx.ctx; } struct doveadm_mail_cmd doveadm_sieve_cmd_rename = { -- GitLab