diff --git a/src/lib-sieve/sieve-match-types.c b/src/lib-sieve/sieve-match-types.c index af2739ebed1c915e649d0a107c5692da36db2497..a129ca122b9ffd4c2ed66d58902afc63bcc81ade 100644 --- a/src/lib-sieve/sieve-match-types.c +++ b/src/lib-sieve/sieve-match-types.c @@ -465,17 +465,20 @@ bool sieve_match_value while ( sieve_coded_stringlist_next_item(mctx->key_list, &key_item) && key_item != NULL ) { - void * const *kctx; - - if ( mctx->value_index == 0 && mtch->match_init != NULL ) { - void *key_ctx = mtch->match_init( - mctx->match_type, mctx->comparator, - str_c(key_item), str_len(key_item)); - - kctx = &key_ctx; - array_idx_set(&mctx->key_contexts, key_index, kctx); - } else - kctx = array_idx(&mctx->key_contexts, key_index); + void *key_ctx = NULL; + void * const *kctx = &key_ctx; + + if ( mtch->match_init != NULL ) { + if ( mctx->value_index == 0 ) { + key_ctx = mtch->match_init( + mctx->match_type, mctx->comparator, + str_c(key_item), str_len(key_item)); + + kctx = &key_ctx; + array_idx_set(&mctx->key_contexts, key_index, kctx); + } else + kctx = array_idx(&mctx->key_contexts, key_index); + } if ( mtch->match (mctx->match_type, mctx->comparator, value, strlen(value),