diff --git a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c index f5543574ab7254aa5270ee66416f514d5a671253..67d7fb5e0425405d86098c0c477b6dab4afcc808 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 42bdd5e7a2857260d01439c3c249d4fe023bcb21..fdc4dd6a20360c3743292823c75c2353a273ae1e 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 8b022c67b564a10fa60a5f7674c5c41f0d5d54ff..8426bd0649012fa5a52b4b69721c34523d77b763 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 )