From 5181c14c2e70ccc89d34b077e79cf044fa2f4e3b Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Mon, 29 Feb 2016 13:26:29 +0100 Subject: [PATCH] lib-sieve: validator: Prevent duplicate registration of persistent command tags. --- src/lib-sieve/sieve-validator.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c index 77ab8440c..a013975f8 100644 --- a/src/lib-sieve/sieve-validator.c +++ b/src/lib-sieve/sieve-validator.c @@ -429,14 +429,23 @@ void sieve_validator_register_persistent_tag struct sieve_tag_registration *reg; + if ( !array_is_created(&cmd_reg->persistent_tags) ) + p_array_init(&cmd_reg->persistent_tags, valdtr->pool, 4); + else { + struct sieve_tag_registration *const *reg_idx; + + /* Avoid dupplicate registration */ + array_foreach (&cmd_reg->persistent_tags, reg_idx) { + if ((*reg_idx)->tag_def == tag_def) + return; + } + } + reg = p_new(valdtr->pool, struct sieve_tag_registration, 1); reg->ext = ext; reg->tag_def = tag_def; reg->id_code = -1; - if ( !array_is_created(&cmd_reg->persistent_tags) ) - p_array_init(&cmd_reg->persistent_tags, valdtr->pool, 4); - array_append(&cmd_reg->persistent_tags, ®, 1); } }