From 27317986cced98ac422f97008cb9a56a4f67413e Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Sun, 12 Apr 2009 15:01:45 +0200 Subject: [PATCH] Environment: fixed segfault and fixed some rfc deviations. --- Makefile.am | 1 + .../environment/ext-environment-common.c | 2 +- .../plugins/environment/tst-environment.c | 25 +++++++++++-------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Makefile.am b/Makefile.am index 294e2326a..4da531e06 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 eed230f30..979716905 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 205026251..0ae60630c 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); -- GitLab