From fc6b817e888b91cc24dab093e7d0c8edb9d6e790 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sat, 17 Nov 2007 00:07:37 +0100
Subject: [PATCH] A few small cosmetic changes in addr-part code and generic
 extension support.

---
 sieve/tests/extensions.sieve        |  1 +
 src/lib-sieve/cmd-require.c         |  7 ++++---
 src/lib-sieve/sieve-address-parts.c | 11 ++++++++++-
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/sieve/tests/extensions.sieve b/sieve/tests/extensions.sieve
index b1c4076fb..769cc9e88 100644
--- a/sieve/tests/extensions.sieve
+++ b/sieve/tests/extensions.sieve
@@ -1,4 +1,5 @@
 require ["fileinto", "reject", "envelope"];
+require ["comparator-i;octet", "comparator-i;ascii-casemap"];
 
 if anyof(exists "frop", size :over 45, size :under 10, address "from" "frop@student.utwente.nl") {
 	keep;
diff --git a/src/lib-sieve/cmd-require.c b/src/lib-sieve/cmd-require.c
index 67e40f935..738f6f826 100644
--- a/src/lib-sieve/cmd-require.c
+++ b/src/lib-sieve/cmd-require.c
@@ -12,6 +12,7 @@ struct cmd_require_context_data {
 
 bool cmd_require_validate(struct sieve_validator *validator, struct sieve_command_context *cmd) 
 {
+	bool result = TRUE;
 	struct sieve_ast_argument *arg;
 	
 	/* Check valid command placement */
@@ -41,7 +42,7 @@ bool cmd_require_validate(struct sieve_validator *validator, struct sieve_comman
 		int ext_id = sieve_validator_extension_load
 			(validator, cmd, sieve_ast_argument_strc(arg));	
 
-		if ( ext_id < 0 ) return FALSE;
+		if ( ext_id < 0 ) result = FALSE;
 		arg->context = (void *) ext_id;
 
 	} else if ( sieve_ast_argument_type(arg) == SAAT_STRING_LIST ) {
@@ -52,7 +53,7 @@ bool cmd_require_validate(struct sieve_validator *validator, struct sieve_comman
 			int ext_id = sieve_validator_extension_load
 				(validator, cmd, sieve_ast_strlist_strc(stritem));
 
-			if ( ext_id < 0 ) return FALSE;
+			if ( ext_id < 0 ) result = FALSE;
 			stritem->context = (void *) ext_id;
 	
 			stritem = sieve_ast_strlist_next(stritem);
@@ -65,7 +66,7 @@ bool cmd_require_validate(struct sieve_validator *validator, struct sieve_comman
 		return FALSE;
 	}
 	 
-	return TRUE;
+	return result;
 }
 
 bool cmd_require_generate
diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c
index 40b2f3d75..836c1eea7 100644
--- a/src/lib-sieve/sieve-address-parts.c
+++ b/src/lib-sieve/sieve-address-parts.c
@@ -56,6 +56,9 @@ static bool addrp_extension_load(int ext_id)
 /* 
  * Validator context:
  *   name-based address-part registry. 
+ *
+ * FIXME: This code will be duplicated across all extensions that introduce 
+ * a registry of some kind in the validator. 
  */
  
 struct addrp_validator_registration {
@@ -147,6 +150,9 @@ void sieve_address_parts_link_tags
 
 /*
  * Interpreter context:
+ *
+ * FIXME: This code will be duplicated across all extensions that introduce 
+ * a registry of some kind in the interpreter. 
  */
 
 struct addrp_interpreter_context {
@@ -230,13 +236,16 @@ static bool tag_address_part_validate
 	const struct sieve_address_part *addrp;
 
 	/* Syntax:   
-	 *   ":localpart" / ":domain" / ":all"
+	 *   ":localpart" / ":domain" / ":all" (subject to extension)
    */
 	
 	/* Get address_part from registry */
 	addrp = sieve_address_part_find
 		(validator, sieve_ast_argument_tag(*arg), &ext_id);
 	
+	/* In theory, addrp can never be NULL, because we must have found it earlier
+	 * to get here.
+	 */
 	if ( addrp == NULL ) {
 		sieve_command_validate_error(validator, cmd, 
 			"unknown address-part modifier '%s' "
-- 
GitLab