From 8de497f054cb8c56a317a7a05c36bcc172352b09 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sun, 27 Jul 2008 21:53:04 +0200
Subject: [PATCH] Added stripping of right white space from header content.

---
 TODO                       |  1 -
 src/lib-sieve/tst-header.c | 19 ++++++++++++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/TODO b/TODO
index d3761e0b5..a72c980dd 100644
--- a/TODO
+++ b/TODO
@@ -3,7 +3,6 @@ Next (in order of descending priority/precedence):
 
 * Full standards compliance review for the engine and all fully implemented 
   sieve extensions. Issues discovered so far:
-	- Header test does not strip trailing whitespace
 	- Fix/Report issues listed in 'doc/rfc/RFC Controversy.txt'
 * Code cleanup 
 * Full security review. Enforce limits on number of created objects, script 
diff --git a/src/lib-sieve/tst-header.c b/src/lib-sieve/tst-header.c
index 1fd90807a..3ca310678 100644
--- a/src/lib-sieve/tst-header.c
+++ b/src/lib-sieve/tst-header.c
@@ -144,6 +144,20 @@ static bool tst_header_operation_dump
  * Code execution 
  */
 
+static inline string_t *_header_right_trim(const char *raw) 
+{
+	string_t *result;
+	int i;
+	
+	for ( i = strlen(raw)-1; i >= 0; i-- ) {
+		if ( raw[i] != ' ' && raw[i] != '\t' ) break;
+	}
+	
+	result = t_str_new(i+1);
+	str_append_n(result, raw, i + 1);
+	return result;
+}
+
 static int tst_header_operation_execute
 (const struct sieve_operation *op ATTR_UNUSED, 
 	const struct sieve_runtime_env *renv, sieve_size_t *address)
@@ -200,7 +214,10 @@ static int tst_header_operation_execute
 			int i;
 
 			for ( i = 0; !matched && headers[i] != NULL; i++ ) {
-				if ( (ret=sieve_match_value(mctx, headers[i], strlen(headers[i]))) < 0 ) 
+				string_t *theader = _header_right_trim(headers[i]);
+			
+				if ( (ret=sieve_match_value(mctx, str_c(theader), str_len(theader))) 
+					< 0 ) 
 				{
 					result = FALSE;
 					break;
-- 
GitLab