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