From: Aki Tuomi Date: Mon, 24 Jul 2017 12:26:10 +0000 (+0300) Subject: var-expand: Require extensions to set error_r if ret != 1 X-Git-Tag: 2.4.0~3792 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e106f7ef334e5ae6af232091c0b1ab0241c250dc;p=thirdparty%2Fdovecot%2Fcore.git var-expand: Require extensions to set error_r if ret != 1 --- diff --git a/src/lib/test-var-expand.c b/src/lib/test-var-expand.c index 77cf6589df..d6710a3c8e 100644 --- a/src/lib/test-var-expand.c +++ b/src/lib/test-var-expand.c @@ -252,7 +252,10 @@ static int test_var_expand_bad_func(struct var_expand_context *ctx ATTR_UNUSED, const char **result_r ATTR_UNUSED, const char **error_r) { - if (strcmp(key, "notfound") == 0) return 0; + if (strcmp(key, "notfound") == 0) { + *error_r = "Invalid field"; + return 0; + } *error_r = "Bad parameters"; return -1; } diff --git a/src/lib/var-expand.c b/src/lib/var-expand.c index c0c0ed2d5b..d4e0c275d9 100644 --- a/src/lib/var-expand.c +++ b/src/lib/var-expand.c @@ -402,8 +402,11 @@ var_expand_try_extension(struct var_expand_context *ctx, array_foreach(&var_expand_extensions, f) { /* ensure we won't match abbreviations */ size_t len = sep-key; - if (strncasecmp(key, f->key, len) == 0 && f->key[len] == '\0') - return f->func(ctx, key, data, var_r, error_r); + if (strncasecmp(key, f->key, len) == 0 && f->key[len] == '\0') { + ret = f->func(ctx, key, data, var_r, error_r); + i_assert(ret == 1 || *error_r != NULL); + return ret; + } } if ((ret = var_expand_func(ctx->func_table, key, data, ctx->context, var_r, error_r)) == 0) {