From a7849cadfa2513b8e978464d401589bedf386264 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Fri, 30 Jul 2010 16:32:19 +0200 Subject: [PATCH] Variables extension: fixed :length set modifier to recognize utf8 characters in stead of octets. --- .../plugins/variables/ext-variables-modifiers.c | 7 +++++-- tests/extensions/variables/modifiers.svtest | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lib-sieve/plugins/variables/ext-variables-modifiers.c b/src/lib-sieve/plugins/variables/ext-variables-modifiers.c index b867dd8cc..1ef691928 100644 --- a/src/lib-sieve/plugins/variables/ext-variables-modifiers.c +++ b/src/lib-sieve/plugins/variables/ext-variables-modifiers.c @@ -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_lower_modify(string_t *in, string_t **result) 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 --git a/tests/extensions/variables/modifiers.svtest b/tests/extensions/variables/modifiers.svtest index 7252331a7..6948aecab 100644 --- a/tests/extensions/variables/modifiers.svtest +++ b/tests/extensions/variables/modifiers.svtest @@ -1,5 +1,6 @@ require "vnd.dovecot.testsuite"; require "variables"; +require "encoded-character"; /* * Modifiers @@ -138,3 +139,14 @@ test "RFC examples" { 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"; + } +} -- GitLab