dovecot-1.2-sieve: Variables extension: fixed :length set modifi...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Fri Jul 30 17:33:54 EEST 2010


details:   http://hg.rename-it.nl/dovecot-1.2-sieve/rev/8b99f7e14ab6
changeset: 1262:8b99f7e14ab6
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Fri Jul 30 16:32:19 2010 +0200
description:
Variables extension: fixed :length set modifier to recognize utf8 characters in stead of octets.

diffstat:

 src/lib-sieve/plugins/variables/ext-variables-modifiers.c |   7 +++++--
 tests/extensions/variables/modifiers.svtest               |  12 ++++++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)

diffs (49 lines):

diff -r 3c032d5f53be -r 8b99f7e14ab6 src/lib-sieve/plugins/variables/ext-variables-modifiers.c
--- a/src/lib-sieve/plugins/variables/ext-variables-modifiers.c	Fri Jul 30 16:08:33 2010 +0200
+++ b/src/lib-sieve/plugins/variables/ext-variables-modifiers.c	Fri Jul 30 16:32:19 2010 +0200
@@ -1,6 +1,9 @@
 /* Copyright (c) 2002-2010 Dovecot Sieve authors, see the included COPYING file
  */
 
+#include "lib.h"
+#include "unichar.h"
+
 #include "sieve-common.h"
 #include "sieve-commands.h"
 #include "sieve-code.h"
@@ -238,8 +241,8 @@
 bool mod_length_modify(string_t *in, string_t **result)
 {
 	*result = t_str_new(64);
-	str_printfa(*result, "%llu", (unsigned long long) str_len(in));
-
+	str_printfa(*result, "%llu", (unsigned long long) 
+		uni_utf8_strlen_n(str_data(in), str_len(in)));
 	return TRUE;
 }
 
diff -r 3c032d5f53be -r 8b99f7e14ab6 tests/extensions/variables/modifiers.svtest
--- a/tests/extensions/variables/modifiers.svtest	Fri Jul 30 16:08:33 2010 +0200
+++ b/tests/extensions/variables/modifiers.svtest	Fri Jul 30 16:32:19 2010 +0200
@@ -1,5 +1,6 @@
 require "vnd.dovecot.testsuite";
 require "variables";
+require "encoded-character";
 
 /*
  * Modifiers
@@ -138,3 +139,14 @@
 		test_fail "modified assignment failed (6): ${a}";
 	}	
 }
+
+/* RFC mentions `characters' and not octets */
+
+test "Modifier :length utf8" {
+	set "a" "Das ist ${unicode: 00fc}berhaupt nicht m${unicode: 00f6}glich.";
+
+	set :length "b" "${a}";
+    if not string "${b}" "32" {
+        test_fail "incorrect number of unicode characters reported: ${b}/32";
+    }
+}


More information about the dovecot-cvs mailing list