From 45bc3d9058e7f671d55e39b1fd2ce41aa9958eca Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sat, 9 Jan 2016 20:58:56 +0100
Subject: [PATCH] lib-sieve: imap4flags extension: Similar problem as previous
 commit, but relating to retrieval rather than manipulation.

---
 .../plugins/imap4flags/ext-imap4flags-common.c       |  7 +++++--
 .../plugins/imap4flags/sieve-ext-imap4flags.h        |  1 +
 src/lib-sieve/plugins/imap4flags/tst-hasflag.c       | 12 ++++++++----
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
index f5543574a..67d7fb5e0 100644
--- a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
+++ b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
@@ -700,11 +700,14 @@ static void ext_imap4flags_stringlist_reset
 
 struct sieve_stringlist *sieve_ext_imap4flags_get_flags
 (const struct sieve_runtime_env *renv,
+	const struct sieve_extension *flg_ext,
 	struct sieve_stringlist *flags_list)
 {
-	if ( flags_list == NULL )
+	if ( flags_list == NULL ) {
+		i_assert( sieve_extension_is(flg_ext, imap4flags_extension) );
 		return ext_imap4flags_stringlist_create_single
-			(renv, _get_flags_string(renv->oprtn->ext, renv->result), FALSE);
+			(renv, _get_flags_string(flg_ext, renv->result), FALSE);
+	}
 
 	return ext_imap4flags_stringlist_create(renv, flags_list, TRUE);
 }
diff --git a/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h
index 42bdd5e7a..fdc4dd6a2 100644
--- a/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h
+++ b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h
@@ -57,6 +57,7 @@ int sieve_ext_imap4flags_remove_flags
 
 struct sieve_stringlist *sieve_ext_imap4flags_get_flags
 (const struct sieve_runtime_env *renv,
+	const struct sieve_extension *flg_ext,
 	struct sieve_stringlist *flags_list);
 
 #endif
diff --git a/src/lib-sieve/plugins/imap4flags/tst-hasflag.c b/src/lib-sieve/plugins/imap4flags/tst-hasflag.c
index 8b022c67b..8426bd064 100644
--- a/src/lib-sieve/plugins/imap4flags/tst-hasflag.c
+++ b/src/lib-sieve/plugins/imap4flags/tst-hasflag.c
@@ -175,6 +175,7 @@ static bool tst_hasflag_operation_dump
 static int tst_hasflag_operation_execute
 (const struct sieve_runtime_env *renv, sieve_size_t *address)
 {
+	const struct sieve_operation *op = renv->oprtn;
 	int opt_code = 0;
 	struct sieve_comparator cmp =
 		SIEVE_COMPARATOR_DEFAULT(i_ascii_casemap_comparator);
@@ -224,13 +225,16 @@ static int tst_hasflag_operation_execute
 
 	sieve_runtime_trace(renv, SIEVE_TRLVL_TESTS, "hasflag test");
 
-	value_list = sieve_ext_imap4flags_get_flags(renv, variables_list);
+	value_list = sieve_ext_imap4flags_get_flags
+		(renv, op->ext, variables_list);
 
 	if ( sieve_match_type_is(&mcht, is_match_type) ||
-		sieve_match_type_is(&mcht, contains_match_type) )
-		key_list = sieve_ext_imap4flags_get_flags(renv, flag_list);
-	else
+		sieve_match_type_is(&mcht, contains_match_type) ) {
+		key_list = sieve_ext_imap4flags_get_flags
+			(renv, op->ext, flag_list);
+	} else {
 		key_list = flag_list;
+	}
 
 	/* Perform match */
 	if ( (match=sieve_match(renv, &mcht, &cmp, value_list, key_list, &ret)) < 0 )
-- 
GitLab