diff --git a/Makefile.am b/Makefile.am index 294e2326a29dbfccb69eb61994b9992e294177c5..4da531e0658618a4aa2d853c9f8981d215e9ac45 100644 --- a/Makefile.am +++ b/Makefile.am @@ -84,6 +84,7 @@ test_cases = \ tests/extensions/enotify/execute.svtest \ tests/extensions/enotify/mailto.svtest \ tests/extensions/environment/basic.svtest \ + tests/extensions/environment/rfc.svtest \ tests/multiscript/basic.svtest if HAVE_DOVECOT_LIBS diff --git a/src/lib-sieve/plugins/environment/ext-environment-common.c b/src/lib-sieve/plugins/environment/ext-environment-common.c index eed230f30bb7fe031264c846ef6e1bc8da3026ad..9797169053b6f05badb5266fc734f2927deeef8b 100644 --- a/src/lib-sieve/plugins/environment/ext-environment-common.c +++ b/src/lib-sieve/plugins/environment/ext-environment-common.c @@ -100,7 +100,7 @@ const struct sieve_environment_item domain_env_item = { const char *envit_host_get_value(const struct sieve_script_env *senv) { - return senv->hostname; + return senv->hostname != NULL ? senv->hostname : ""; } const struct sieve_environment_item host_env_item = { diff --git a/src/lib-sieve/plugins/environment/tst-environment.c b/src/lib-sieve/plugins/environment/tst-environment.c index 2050262511d47a8bb0637c2c659de05b9d51d60d..0ae60630ca5fad112b457a6101ecd88228bd537c 100644 --- a/src/lib-sieve/plugins/environment/tst-environment.c +++ b/src/lib-sieve/plugins/environment/tst-environment.c @@ -200,18 +200,21 @@ static int tst_environment_operation_execute env_item = ext_environment_item_get_value(str_c(name), renv->scriptenv); - mctx = sieve_match_begin(renv->interp, mtch, cmp, NULL, key_list); - - if ( (mret=sieve_match_value(mctx, env_item, strlen(env_item))) < 0 ) { - result = FALSE; - } else { - matched = ( mret > 0 ); + if ( env_item != NULL ) { + mctx = sieve_match_begin(renv->interp, mtch, cmp, NULL, key_list); + + if ( (mret=sieve_match_value(mctx, strlen(env_item) == 0 ? NULL : env_item, + strlen(env_item))) < 0 ) { + result = FALSE; + } else { + matched = ( mret > 0 ); + } + + if ( (mret=sieve_match_end(mctx)) < 0 ) + result = FALSE; + else + matched = ( mret > 0 || matched ); } - - if ( (mret=sieve_match_end(mctx)) < 0 ) - result = FALSE; - else - matched = ( mret > 0 || matched ); if ( result ) { sieve_interpreter_set_test_result(renv->interp, matched);