From 741f13ebafe76d1d35c5ebfa206e03c79f37c5ec Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Mon, 30 Aug 2010 03:13:29 +0200 Subject: [PATCH] Fixed FIXME: Date test now reports warning when invalid zone argument is encountered at runtime. --- src/lib-sieve/plugins/date/tst-date.c | 17 +++++++++++------ src/lib-sieve/sieve-code.c | 4 ++-- src/lib-sieve/sieve-code.h | 6 ++++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/lib-sieve/plugins/date/tst-date.c b/src/lib-sieve/plugins/date/tst-date.c index ce6e0885d..e719318ee 100644 --- a/src/lib-sieve/plugins/date/tst-date.c +++ b/src/lib-sieve/plugins/date/tst-date.c @@ -390,7 +390,7 @@ static int tst_date_operation_execute string_t *date_part = NULL, *zone = NULL; struct sieve_stringlist *hdr_list = NULL, *hdr_value_list; struct sieve_stringlist *value_list, *key_list; - bool zone_specified = FALSE; + bool zone_specified = FALSE, zone_literal = TRUE; int time_zone; int match, ret; @@ -414,6 +414,8 @@ static int tst_date_operation_execute if ( (ret=sieve_opr_string_read_data (renv, &oprnd, address, "zone", &zone)) <= 0 ) return ret; + + zone_literal = sieve_operand_is_string_literal(&oprnd); } zone_specified = TRUE; @@ -435,26 +437,29 @@ static int tst_date_operation_execute if ( (ret=sieve_opr_string_read(renv, address, "date-part", &date_part)) <= 0 ) return ret; - + /* Read key-list */ if ( (ret=sieve_opr_stringlist_read(renv, address, "key-list", &key_list)) <= 0 ) return ret; - + /* Determine what time zone to use in the result */ if ( !zone_specified ) { time_zone = EXT_DATE_TIMEZONE_LOCAL; } else if ( zone == NULL ) { time_zone = EXT_DATE_TIMEZONE_ORIGINAL; } else if ( !ext_date_parse_timezone(str_c(zone), &time_zone) ) { - /* FIXME: warn about parse failures */ + if ( !zone_literal ) + sieve_runtime_warning(renv, NULL, + "specified :zone argument '%s' is not a valid timezone " + "(using local zone)", str_sanitize(str_c(zone), 40)); time_zone = EXT_DATE_TIMEZONE_LOCAL; } - /* + /* * Perform test */ - + if ( sieve_operation_is(op, date_operation) ) { sieve_runtime_trace(renv, SIEVE_TRLVL_TESTS, "date test"); diff --git a/src/lib-sieve/sieve-code.c b/src/lib-sieve/sieve-code.c index d08991590..4f3b206fa 100644 --- a/src/lib-sieve/sieve-code.c +++ b/src/lib-sieve/sieve-code.c @@ -546,7 +546,7 @@ bool sieve_opr_string_dump_ex return FALSE; } - *literal_r = sieve_operand_is(&operand, string_operand); + *literal_r = sieve_operand_is_string_literal(&operand); return sieve_opr_string_dump_data(denv, &operand, address, field_name); } @@ -601,7 +601,7 @@ int sieve_opr_string_read_ex <= 0 ) return ret; - *literal_r = sieve_operand_is(&operand, string_operand); + *literal_r = sieve_operand_is_string_literal(&operand); return sieve_opr_string_read_data(renv, &operand, address, field_name, str_r); } diff --git a/src/lib-sieve/sieve-code.h b/src/lib-sieve/sieve-code.h index 5f768f5e7..30c7b8880 100644 --- a/src/lib-sieve/sieve-code.h +++ b/src/lib-sieve/sieve-code.h @@ -231,6 +231,12 @@ static inline bool sieve_operand_is_string operand->def->class == &string_class ); } +static inline bool sieve_operand_is_string_literal +(const struct sieve_operand *operand) +{ + return ( operand != NULL && sieve_operand_is(operand, string_operand) ); +} + /* String list */ void sieve_opr_stringlist_emit_start -- GitLab