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