From 82e4024e0f00e8e58c39deb57e67c826b094bc7e Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Tue, 25 Dec 2007 12:40:06 +0100
Subject: [PATCH] Fixed non-standard behavior for the encoded-character
 extension.

---
 sieve/tests/encoded-character.sieve   | 2 +-
 src/lib-sieve/ext-encoded-character.c | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/sieve/tests/encoded-character.sieve b/sieve/tests/encoded-character.sieve
index f9972a505..1fb5b4692 100644
--- a/sieve/tests/encoded-character.sieve
+++ b/sieve/tests/encoded-character.sieve
@@ -7,5 +7,5 @@ if address :contains "from" "idiot.com" {
 } elsif header :contains "subject" "idiot" {
 	fileinto "INBOX.${hex: 49 44 49 4F 54}";
 } else {
-	fileinto "INBOX.${unicode: 0052 00e6}vh${unicode: 00f8 006c}";
+	fileinto "INBOX.${unicode: 0052 00E6}vh${unicode: 00F8 006C}";
 }
diff --git a/src/lib-sieve/ext-encoded-character.c b/src/lib-sieve/ext-encoded-character.c
index a213c086b..96f017897 100644
--- a/src/lib-sieve/ext-encoded-character.c
+++ b/src/lib-sieve/ext-encoded-character.c
@@ -59,7 +59,8 @@ static bool _skip_whitespace
 			continue;
 		}
 		
-		if ( **in != ' ' && **in != '\n' ) /* Loose LF is non-standard */
+		/* (Loose LF is non-standard) */
+		if ( **in != ' ' && **in != '\n' && **in != '\t' ) 
 			break;
 			
 		(*in)++;
@@ -78,8 +79,9 @@ static bool _parse_hexint
 	
 		if ( (**in) >= '0' && (**in) <= '9' ) 
 			*result = ((*result) << 4) + (**in) - ((unsigned int) '0');
+		/* Lower-case version is not allowed by RFC 
 		else if ( (**in) >= 'a' && (**in) <= 'f' )
-			*result = ((*result) << 4) + (**in) - ((unsigned int) 'a') + 0x0a;
+			*result = ((*result) << 4) + (**in) - ((unsigned int) 'a') + 0x0a;*/
 		else if ( (**in) >= 'A' && (**in) <= 'F' )
 			*result = ((*result) << 4) + (**in) - ((unsigned int) 'A') + 0x0a;
 		else
-- 
GitLab