diff --git a/Makefile.am b/Makefile.am index 0e05c0957d9737598d93b4ca9ba339b81a0d555b..6a3f0f7896df9c3d7d89f8024fa46fb9a520e708 100644 --- a/Makefile.am +++ b/Makefile.am @@ -195,7 +195,8 @@ $(test_cases): failure_test_cases = \ tests/failures/fuzz1.svtest \ - tests/failures/fuzz2.svtest + tests/failures/fuzz2.svtest \ + tests/failures/mailbox-bad-utf8.svtest $(failure_test_cases): @$(TEST_BIN) -F $(top_srcdir)/$@ diff --git a/src/testsuite/cmd-test-message.c b/src/testsuite/cmd-test-message.c index dd3c4caff5486d42adf4d1c3096ce0add772f28f..ff3670495c736cc3b6ce57afe05af3283384cefd 100644 --- a/src/testsuite/cmd-test-message.c +++ b/src/testsuite/cmd-test-message.c @@ -2,12 +2,14 @@ */ #include "lib.h" +#include "str-sanitize.h" #include "istream.h" #include "mail-storage.h" #include "sieve-common.h" #include "sieve-commands.h" #include "sieve-message.h" +#include "sieve-actions.h" #include "sieve-validator.h" #include "sieve-generator.h" #include "sieve-interpreter.h" @@ -253,6 +255,20 @@ cmd_test_message_validate_folder_tag(struct sieve_validator *valdtr, return FALSE; } + /* Check name validity when folder argument is not a variable */ + if ( sieve_argument_is_string_literal(*arg) ) { + const char *folder = sieve_ast_argument_strc(*arg), *error; + + if ( !sieve_mailbox_check_name(folder, &error) ) { + sieve_command_validate_error( + valdtr, cmd, "%s command: " + "invalid mailbox `%s' specified: %s", + sieve_command_identifier(cmd), + str_sanitize(folder, 256), error); + return FALSE; + } + } + /* Skip parameter */ *arg = sieve_ast_argument_next(*arg); @@ -450,6 +466,7 @@ cmd_test_message_mailbox_operation_execute(const struct sieve_runtime_env *renv, sieve_number_t msg_index; unsigned int is_test = 0; bool result; + const char *error; int ret; /* @@ -472,6 +489,12 @@ cmd_test_message_mailbox_operation_execute(const struct sieve_runtime_env *renv, if (ret <= 0) return ret; + if (!sieve_mailbox_check_name(str_c(folder), &error)) { + return testsuite_test_failf( + renv, "invalid mailbox `%s' specified: %s", + str_c(folder), error); + } + /* * Perform operation */ diff --git a/tests/failures/mailbox-bad-utf8.svtest b/tests/failures/mailbox-bad-utf8.svtest new file mode 100644 index 0000000000000000000000000000000000000000..ad104e5ab8ddcc0f25a7773fce1b90d03120b2bf --- /dev/null +++ b/tests/failures/mailbox-bad-utf8.svtest @@ -0,0 +1,6 @@ +require "vnd.dovecot.testsuite"; +require "encoded-character"; + +test "Mailbox parameter with bad UTF-8" { + test_message :folder "I${hex:9b}BOX" 0; +}