From c65f1c4c9dc0fcb6050f076e975fe26c71e89ae8 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Thu, 11 Jun 2020 20:53:23 +0200 Subject: [PATCH] lib-sieve: plugins: mailbox: tst-mailboxexists - Check mailbox name validity at runtime. Fixes assert failure occurring at runtime (when value originates from variable). --- .../plugins/mailbox/tst-mailboxexists.c | 11 +++++++++++ tests/extensions/mailbox/errors.svtest | 17 +++++++++++++++++ .../mailbox/errors/mailboxexists-bad-utf8.sieve | 9 +++++++++ 3 files changed, 37 insertions(+) create mode 100644 tests/extensions/mailbox/errors/mailboxexists-bad-utf8.sieve diff --git a/src/lib-sieve/plugins/mailbox/tst-mailboxexists.c b/src/lib-sieve/plugins/mailbox/tst-mailboxexists.c index 53a594142..e0fd33d1d 100644 --- a/src/lib-sieve/plugins/mailbox/tst-mailboxexists.c +++ b/src/lib-sieve/plugins/mailbox/tst-mailboxexists.c @@ -157,6 +157,17 @@ tst_mailboxexists_test_mailbox(const struct sieve_runtime_env *renv, { const struct sieve_execute_env *eenv = renv->exec_env; struct mailbox *box; + const char *error; + + /* Check validity of mailbox name */ + if (!sieve_mailbox_check_name(mailbox, &error)) { + sieve_runtime_warning( + renv, NULL, "mailboxexists test: " + "invalid mailbox name `%s' specified: %s", + str_sanitize(mailbox, 256), error); + *all_exist_r = FALSE; + return SIEVE_EXEC_OK; + } /* Open the box */ box = mailbox_alloc_for_user(eenv->scriptenv->user, diff --git a/tests/extensions/mailbox/errors.svtest b/tests/extensions/mailbox/errors.svtest index fcc17c7e8..0821f5212 100644 --- a/tests/extensions/mailbox/errors.svtest +++ b/tests/extensions/mailbox/errors.svtest @@ -20,4 +20,21 @@ test "Invalid Syntax" { } } +/* + * Mailboxexists - bad UTF-8 in mailbox name + */ +test "Mailboxexists - bad UTF-8 in mailbox name" { + if not test_script_compile "errors/mailboxexists-bad-utf8.sieve" { + test_fail "compile failed"; + } + + if not test_script_run { + test_fail "execution failed"; + } + + # FIXME: check warnings + if not test_error :count "eq" :comparator "i;ascii-numeric" "0" { + test_fail "wrong number of runtime errors reported"; + } +} diff --git a/tests/extensions/mailbox/errors/mailboxexists-bad-utf8.sieve b/tests/extensions/mailbox/errors/mailboxexists-bad-utf8.sieve new file mode 100644 index 000000000..e68e00e32 --- /dev/null +++ b/tests/extensions/mailbox/errors/mailboxexists-bad-utf8.sieve @@ -0,0 +1,9 @@ +require "mailbox"; +require "variables"; +require "encoded-character"; + +set "mailbox" "${hex:ff}rop"; +if mailboxexists "${mailbox}" { + keep; +} + -- GitLab